Swifter 读书笔记
预计 8 分钟
读了《SWITER 100个Swift必备Tips》,记录了一些东西。
- 将
protocol的方法声明为mutating,可以改变struct或者enum中的属性值 - 初始化方法顺序:先设置子类自己需要初始化的参数,再调用父类的初始化方法,最后调用父类中需要改变的参数
- 在
init?中可以对self赋值 - 获取
Self类型的实例,self.dynamicType.init(),要求需要有required关键字修饰的初始化方法 - 初始化方法对属性的设定,以及在
willSet和didSet中对属性的再次设定都不会再次触发属性观察器的调用 - 属性观察调用顺序
get(实现didSet时, 用来获取 oldValue)willSetsetdidSet - protocol extension 可以为 protocol 中定义的方法提供一个默认的实现。
- Swift 中是没有泛型接口(protocol)的,但是使用一个必须实现的别名,在一定程度上算是一种折衷
- 添加编译符号:Build Settings -> Swift Compiler -> Custom Flags -> Other Swift Flags ->
-D FREE_VERSION - 如果 Class 是 NSObject 的子类,Swift 会默认自动为所有的非 private 的类和成员加上
@objc - 用
@objc(someName)来改变类或方法的名字(与 Objective-C 进行混编的时候 Objective-C 中的名字) - 在 Swift 2.0 之后,实现可选接口可以通过接口扩展的方式来实现
- 在访问的时候不会已经被释放的话尽量使用
unowned,如果存在被释放的可能就用weak - 使用初始化方法(init)的话,就不需要面临自动释放的问题了,每次在超过作用域后,自动内存管理都将为我们处理好内存相关的事情
- C 中的
const Type *对应于 Swift 中的 UnsafePointer,Type *对应于 UnsafeMutablePointer - 调用 C 动态库,如果一个动态库暂时没有 module 化,可以使用桥接的形式使用
- 字符串插值的时候将直接使用类型的
Streamable,Printable,DebugPrintable接口,按照先后次序,前面没有使用用后面 - 原来的
NS_OPTIONS被映射为了满足OptionSetType接口的struct类型,以及一组静态的get属性 - 对于原来的
kNilOptions,现在可以直接用一个空集合表示[] - 使用
@asmname可以将某个C函数直接映射成Swift中的函数 - Swift的
sizeofValue所返回的是这个值的实际大小,而不是内容的大小 - 使用
objc_getAssociatedObject和objc_setAssociatedObject在扩展中添加成员变量 @synchronized在幕后做的事情是 调用了objc_sync中的objc_sync_enter和objc_sync_exit,并加入了异常判断,在Swift中没有@synchronized- 在命令行输入
xcrun swift进入 Swift 命令行工具 arc4random所返回的值无论在什么平台上都是一个UInt32,另一个方法arc4random_uniform接收一个UInt32的数字n,将结果归一化到 0 到 n - 1 之间- 调用
print打印对象或结构体之类的,可以实现CustomStringConvertible和CustomDebugStringConvertible来自定义打印内容 - 在 Swift 2 时代中的错误处理的最佳实践,对于同步API使用异常机制,对于异步API使用泛型枚举
- 对应target -> Build Settings -> Swift Compiler -> Custom Flags -> Other Swift Flags -> 添加 -assert-config Debug 强制启用断言 -assert-config Release 强制禁用断言
- 在遇到确实因为输入的错误无法使程序继续运行的时候,考虑以
fatalError的形式终止程序 - 安全的资源组织方式,使用
enum或者struct,一些成熟的自动化工具:R.swift、SwiftGen - Playground 延时运行,
import XCPlayground后,调用XCPlaygroundPage.currentPage.needsIndefiniteExecution = true - Log输出几个有用的编译符号:
#file#line#column#function - 使用溢出处理的运算符可以在溢出时程序不崩溃
- Swift 中的
private是按文件限制范围的 - Swift 中专门为 Core Data 假如了
@NSManaged - 闭包歧义跟多元组有关系
#学习笔记
#技术
#开发
#Swift
#iOS