Swift3.0使用NSNotification.name let kOpenXcodePathNotification = "kOpenXcodePathNotification" NotificationCenter.default.post...类的方法,能不用就尽量不用,哈哈哈。...执行速度更快,IPA体积更小 ( 从 iOS 开发中的争议(一)得知) 感觉个人平常很少用成员变量,当然除了在 init 和 dealloc 、getter、setter中 除外咯,其他地方例如临时生成一个...想了想,为了代码的看起来的规范性,我是不愿这样写的。 但是细细想来,一些临时的值确实没必要经过 setter 和 getter 方法,所以想着还是直接用 成员变量的。...PS: 在 Block 中对于成员变量一定要 使用 self-> _testName, 否则直接使用 _testName, 就算添加了 weakSelf/strongSelf 还是会有循环引用的。
《刨根问底Objective-C Runtime(4)- 成员变量与属性》:本篇笔记主要是讲述Objective-C Runtime的成员变量和属性。...《QQ 中未读气泡拖拽消失的实现分析》:QQ 中针对强迫症有个很棒的交互,对于那些暂时不想理会的未读信息气泡,可以直接手指拖拽去掉。本文介绍了其实现方法。...《UIResponder》:在 UIKit 中,IApplication、UIView、UIViewController 这几个类都是直接继承自 UIResponder 类。...另外 SpriteKit 中的 SKNode 也是继承自 UIResponder 类。因此 UIKit 中的视图、控件、视图控制器,以及我们自定义的视图及视图控制器都有响应事件的能力。...本文是阮一峰原创的入门教程。
//SceneDelegate.swift 代码 class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow...下面是纯代码实现界面显示的代码: Swift适配代码步骤: 1)第一步,SceneDelegate中添加@available(iOS 13, *) //SceneDelegate.swift @available...SceneDelegate类中实现代码,如下 //SceneDelegate.swift import UIKit import SwiftUI class SceneDelegate: UIResponder...该控制器用于将基于SwiftUI的视图显示在屏幕上。 最后,UIScene的实例化对象scene实际上是UIWindowScene类型的对象。 这就是as?对可选类型转换的原因。...(到目前为止,已创建的场景通常为“ UIWindowScene”类型,但将来可能还会有更多类型的场景。)
Swift 中的 Actors 旨在完全解决数据竞争问题,但重要的是要明白,很可能还是会遇到数据竞争。本文将介绍 Actors 是如何工作的,以及你如何在你的项目中使用它们。 什么是 Actors?...Swift中的Actor几乎和类一样,但不支持继承。 不支持继承意味着不需要像便利初始化器和必要初始化器、重写、类成员或open和final语句等功能。...所有与同步访问有关的逻辑都被隐藏在Swift标准库中的实现细节里。然而,最有趣的部分发生在我们试图使用或读取任何可变属性和方法的时候: Actors中的方法是隔离的,以便同步访问。...没有数据竞争的风险,因为在读取过程中,它的值不能从另一个线程中改变。 然而,我们的其他方法和属性会改变一个引用类型的可变状态。为了防止数据竞争,需要同步访问,允许按顺序访问。...我们可以用nonisolated关键字标记我们的方法,告诉 Swift编 译器我们的方法没有访问任何隔离数据: extension ChickenFeeder { nonisolated func
iOS runtime swift中的Swizzling方法交换 背景知识 Swift 是一种强类型语言。即默认类型是安全的静态类型。...纯Swift类的函数调用已经不再是OC的运行时发送消息,而是类似于C++的vtable,在编译时就确定了调用哪个函数,所以没法通过runtime获取方法,属性。...Swift中的动态性可以通过OC运行时来获得,动态性最常用的就是方法替换(Method Swizzling)。...+load方法是在类加载的时候就会调用,而+initialize方法是在给类发送第一个消息之前再调用,相当于懒加载一样。...{ UIApplication.runOnce return super.next } } /// swizzling协议 在需要交换方法的类中遵循此协议,实现方法
,在 Objective-C 中,子类会直接继承父类所有的初始化方法 Swift 在 Swift 中,初始化器的规则严格且复杂,目的就是为了使代码更加安全,如果不符合规则,会直接报错,常常会让刚接手 Swift...• 在没有给所有非可选类型属性赋值(初始化完成)之前,不能调用self相关的任何东西,例如:调用实例属性,调用实例方法。...必须重写旧的定初始化器,在里面调用新的指定初始化器 • 在 Swift 中,初始化的时候需要保证类(结构体、枚举)的所有非可选类型属性都会有值 • 在 Swift 中,必须在初始化完成后才能调用实例属性...,调用实例方法 • 在 Swift 中,如果存在继承,并且子类有新的非可选类型属性,或者无法保证所有非可选类型属性都已经有默认值,那么就需要新创建一个指定初始化器,或者重写父类的指定初始化器,并且在里面调用父类的指定初始化器...• 在 Swift 中,子类如果没有新创建一个指定初始化器,并且没有重写父类的指定初始化器,则会继承父类的指定初始化器和便利初始化器 • 在 Swift 中,子类如果新创建一个指定初始化器,或者重写了父类的某个指定初始化器
Swift-MVVM 简单演练(一) Swift-MVVM 简单演练(三) Swift-MVVM 简单演练(四) 处理下拉刷新逻辑 根据接口文档,下拉刷新是返回ID比since_id大的微博(即比since_id...设置为0,since_id设置成取微博数据的第一条的id 这里用三目运算就会很简单明了,swift中如果能用三目判断的,大家可以多用一下。...因为都是你自己微博下面的程序,所以拿到的微博数据都是一样的,不耽误你继续进行。 因此,我们需要处理一下,如果用户刷新数据为0条,刷新三次以后在上拉加载数据就不走网络请求的方法。...确认加载用户文件的代码位置 在HQNetWorkManager.swift中,下面的代码逻辑是保证用户是否能拿到token也是登录成功与否的关键。...而此时,如果进行强行guard let 守护,又是会有问题的。直接爆红,提示你,守护的必须是可选类型。
开发语言 Swift 或者 Objective-C(本教程基于 Swift 5.x)。 开发者账号 个人 99 $/年 公司 99 $/年 企业 299 $/年 iOS系统四个层次 ?...Storyboard 中的界面与ViewController.swift之间的联系(一个界面与一个类文件关联)。...tag:标记(Int 类型,默认等于0),设置后,可以通过所在容器View.viewWithTag方法拿到这个视图。 title:标题。 superview:父视图。 subviews:所有子视图。...有没有更加友好、更加直观、更加便捷、更加高效的方法呢?答案是肯定的,那就是 @IBOutlet 与 @IBAction。 @IBOutlet 写于类中的属性。...@IBAction 写于类中的方法。 与 Storyboard 中的 UIView 产生的事件建立联系。 当相应的事件发生时,方法就会被调用。
该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。 UML 命令模式URL图 实现方式 声明仅有一个执行方法的命令接口。...在这些类中添加保存命令的成员变量。发送者只能通过命令接口与其命令进行交互。发送者自身通常并不创建命令对象,而是通过客户端代码获取。 修改发送者使其执行命令,而非直接将请求发送给接收者。...那这种方式的弊端想必大家可以很明显的看出来,上述代码示例只是把didFinishLaunch方法进行了解耦,对其他方法并没有进行改造,如果对其他方法进行改造,也需要实现上述一套,会有些冗余。...对于AppDelegate而言,其内部不会再有任何业务上的逻辑,并且因为协议的默认实现,已经将任务默认分发到各个Leaf中,其剩余的任务仅仅就是提供Leaf列表,并且考虑到在组件化环境中的使用,不直接引用各...关于AppDelegate的解耦其实还有阿里的BeeHive[5],不过其是一个综合的组件化方案,AppDelegate的事件分发只是其一部分。
1.NS_ASSUME_NONNULL_BEGIN && NS_ASSUME_NONNULL_END 在Swift中存在Option类型,也就是使用?和!声明的变量。...但是OC里面没有这个特征,因为在XCODE6.3之后出现新的关键词定义用于OC转SWIFT时候可以区分到底是什么类型 __nullable && ___nonnull __nullable指代对象可以为...而在方法的声明中,我们还可以使用不带下划线的nullable和nonnull,如下所示: - (nullable id)itemWithName:(NSString * nonnull)name 在属性声明中...不过,为了安全起见,苹果还制定了几条规则: typedef定义的类型的nullability特性通常依赖于上下文,即使是在Audited Regions中,也不能假定它为nonnulla。...实际上,苹果已以帮我们处理好了这种兼容问题,我们可以安全地使用它们: 老代码仍然能正常工作, 即使对nonnull对象使用了nil也没有问题。
在这过程中不断的学习/实践,团队内的Code Review,也对如何使用Swift来提高代码质量有更深的理解。...模式匹配 - 通过模式匹配检测switch中未处理的case。 类型安全 强制类型转换 - 禁止隐式类型转换避免转换中带来的异常问题。同时类型转换不会带来额外的运行时消耗。。...但是当do方法内String类型发生了改变函数,使用方并不知道已变更没有做相应的适配,这时候就会造成业务逻辑的错误。 提示:这类错误通常更难发现,这也是我们在一次真实bug场景遇到的。...编码中应当尽可能减小属性/方法/类型的访问控制级别隐藏内部实现。 提示:同时也有利于编译器进行优化。...在这过程中也会提高我们的编码能力,加深对于一些通用编程概念/思想的理解,包括空安全、值类型、协程、不共享数据的Actor并发模型、函数式编程、面向协议编程、内存所有权等。
Swift 5.3 内置于 Xcode 12,新增了多项实用功能。 多尾随闭包 Swift 5.3 之前即使有多个尾随闭包也只有最后一个能被写成精简的形式,这种写法一个闭包在圆括号内,另一个在外面。...新的写法把这些闭包都放在圆括号外面,显得更加简洁。注意:尾随闭包中的第一个闭包的标签会被强制省略。...var body: some Scene { WindowGroup { ContentView() } } } self改变 以前闭包中引用当前范围的内容时必须带上...,Swift 5.3 之后如果不产生循环引用可以省略self.。这个新特性对 SwiftUI 来说非常友好,因为 SwiftUI 中的 View 保存在值类型的结构体中,所以不会发生循环引用。...oldValue(即使没有用到),从而影响性能。
大部分iOS开发者都是跟Cocoa Touch layer打交道 5、常用的IOS系统框架 AddressBook.framework:提供访问存储核心数据库中用户联系人信息的功能 AddressBookUI.framework...CoreText直接和CoreGraphics(CG)一起工作。...:struct objc_class结构如下: isa指针:指向该对象所属类型的类型对象(Class Object)。...在Objective-C中,类也是用对象来表示的,而类的isa指针指向它的metaclass(存储静态成员变量和类方法)。 super_class指针:指向父类。 name:类名称。...ivars:指向成员变量列表的指针。 methodLists:根据标志位的不同可能指向不同,比如可能指向实例方法列表,或者指向类方法列表。
;我们不希望该代码被编译到我们的最终应用程序中,我们只希望其中包含最终的日期字符串。...当应用于类型(例如类)时,这允许我们对类中的每个成员应用一个属性。这与较旧的 @objcMembers 属性在概念上是相同的,它将 @objc 添加到类型中的每个属性。...当与析构器结合使用时,消耗性方法会变得更加复杂,因为它们可能会重复执行你所做的任何清理工作。...,例如在不同的方法中。...将这些称为存在类型:您正在使用的实际数据类型位于一个盒子内,当我们在该盒子上调用方法时,Swift 理解它应该隐式地在盒子内的数据上调用方法。
Swift 5.5 终于为开发者带来了async,await,actor这些便捷的异步语法,而其中一个小小的@MainActor语法,能带来让我们的开发更加便捷安全。...@MainActor class UILabel: UIView @MainActor class UIViewController: UIResponder 也就是,在swift 的concurrency...系统中,被@MainActor装饰过的类,及其子类的属性和方法,都会自动在主线程中,get,set,或者call。...自定义UI class 假设,我们SwiftUI中的一个实现ObservableObject的类,其中被@Published装饰的属性需要自动运行在主线程。 我们只需要装饰@MainActor即可。...result = result } } } @MainActor 不会对Callback中的代码生效 @MainActor 必须使用在Swift async/await Concurrency环境中
五、可选类型 在Objective-C开发中,如果一个变量暂时不会使用到,可以将它赋值为0或者赋值为空,而在swift中,nil是一个特殊的类型,如果它和真实类型不匹配是不能进行赋值的。...在前面的教程中提到过,不同类型的值是不能直接运算的。而可选项有两种值的产生,若它的值为nil则不能参加计算。 因此引入解包的概念,“!”代表强制解包。它的意思是从可选值中强行获取对应的非空值。...let resultArray = arrayM + array 九、swift中的集合 集合(Set)用来存储相同类型并且没有确定顺序的值。...十七、枚举 1、定义 在swift中,枚举使用的是由enum关键字来创建的枚举,枚举的所有成员都放在一对大括号里面。它为一组相关的值定义一个共同的类型。使用case关键字来定义一个新的枚举成员值。...因为它没有考虑到枚举类的全部成员。如果说不需要匹配所有的枚举成员,可以提供一个default分支来涵盖其他未明确处理的枚举成员。
前言 腾讯地图iOS SDK目前只提供了Objective-C版本的SDK, 因此如果是Swift项目, 则需要自己通过Bridging文件来将其引入 使用场景 Swift项目接入腾讯地图 接入流程 1...、创建Swift项目, 本人采用的是StoryBoard创建的项目, 不过使用方法是一样的: [33f2dfbc960a4957a6d8374ef692b4ca~tplv-k3u1fbpfcp-watermark.image...SRCROOT)为快捷指令, 可以直接识别项目的根路径): [3fbffac9f9f04cef960dee198d483780~tplv-k3u1fbpfcp-watermark.image] 如果编译没有出错...~tplv-k3u1fbpfcp-watermark.image] 5、编译通过的话就可以在BridgingHeader文件中导入Objective-C的框架了: #ifndef TencentMapSwiftDemo_Bridging_header_h...apiKey = "我的Key" return true } } 8、最后, 附加一段ViewController中的基本使用: import UIKit class
将询问发送通知授权的代码也抽取出来 在swift中extension是可以无限多个写的,我们如果能将更多的零碎的方法抽取出来,放到extension中去。代码会清晰很多,也会方便管理很多。...---- 处理登录相关通知 Token为nil时测试 所有的网络请求都是基于token的,如果没有token的话(虽然实际程序中几乎不可能出现token = nil的情况),我们应该使程序在当token...所以在登录成功但是没有执行完成回调的时候去执行该方法获取用户个人信息是比较理想的位置。 下面我这里并没有做网络请求交互获取token,只是模拟了一下而已。...上面说自动布局工作原理的时候提到过 如果希望某些约束提前更新!...,再将按钮的监听方法抽取到extension中,只是暂时我自己习惯这样写而已。
像object- c中常用的dictionary,array,string等,在swift中都是结构体类型。 2.swift中,类和结构体在创建实例时,必须为所有存储型属性设置合适的初始值。...4.结构体逐一成员构造函数 除了上面提到的默认构造函数,swift中,如果一个结构体的属性申明的时候没有设置默认值,也没有自定义构造函数,swift也会帮助结构体创建一个逐一成员构造函数。...5. 构造函数代理 所谓构造函数代理,指的是一个构造函数通过调用其他构造函数来完成部分初始化工作。下面分结值类型和类类型两种情况来介绍: 值类型:包括结构体和枚举。...最终,任意构造器链中的便利构造器可以有机会定制实例和使用self。 3.构造函数的继承与重写 与object-c不同的是,swift中,子类对父类的构造函数默认是不继承的,除非满足一定的条件。...前面说到,swift中子类默认是不继承父类的构造函数的,但是满足以下规则的情况下,子类可以继承父类的构造函数: 规则 1 如果子类没有定义任何指定构造器,它将自动继承所有父类的指定构造器。
(by gashero)感谢这些基础工作,才使得可以在Apple软件开发中引入新的编程语言。 Objective-C开发者会感到Swift的似曾相识。...如果初始化值没有提供足够的信息(或没有初始化值),可以在变量名后写类型,以冒号分隔。...构造的范围则包含两个值。 5 函数与闭包 使用 func 声明一个函数。调用函数使用他的名字加上小括号中的参数列表。使用 -> 分隔参数的名字和返回值类型。...子类的方法可以通过标记 override 重载超类中的实现,而没有 override 的会被编译器看作是错误。编译器也会检查那些没有被重载的方法。...注意上面引用Hearts成员的两种方法:当赋值到 hearts 常量时,枚举成员 Suit.Hearts 通过全名引用,因为常量没有明确的类型。
领取专属 10元无门槛券
手把手带您无忧上云