这里是一些从2.2到3.0的笔记。
[Swift 3.0 Migration Guide] https://swift.org/migration-guide/
指针
1.UnsafePointer, UnsafeMutablePointer, AutoreleasingUnsafeMutablePointer, OpaquePointer, Selector, NSZone等指针属性不能为nil,如需为nil,必须是Optional;
2.memory属性变为pointee;
3.用Int(bitPattern: nullablePointer)来表示传给C语言的指针类型;
4.引入 Unsafe[Mutable]RawPointer类型,用于安全地进行指针的类型转换
5.COpaquePointer 现在重命名为 OpaquePointer集合类型
1.Range<>.reversed 失效,如需实现相似功能,使用<Collection>[<Range>].indices.reversed()方法;
- Index有很多方法都被挪去 Collection 类型里的方法,如 Collection.index(index, offsetBy: delta), Collection.index(index, offsetBy: delta, limitedBy: otherIndex), Collection.distance(from: index, to: otherIndex)等;
- Swift Foundation
1.使用struct 来构建Notification:static let MyNotification = Notification.Name("MyNotification");
2.由于这些原来用 String 来表达的类型现被封装成 struct,在一些地方需要用.rawValue 来传参;
3.如果需要使用 URL 相关的API,需要手动改写,Swift Migrator 不会帮你转换;
4.原来的 (x as NSDate).earlierDate(y) 现在写成 x < y ? x : y;原来的 (x as NSDate).laterDate(y) 现在写成 x < y ? y : x;
- dispatch_once弃用,现在 lazily initialized 的闭包可以保证一次运行和线程安全;
6.Closure 现在默认是non-escaping ,因此可能需要用到@escaping
7.OC 的 id 类型现在是Any 类型