Swift beta3 Changes ( Swift 在 beta3 中的变化)
| Commit | Date | Commit Message | |
|---|---|---|---|
17e5e6a |
2020-11-16 15:41:32 +0800 | *: use jekyll | View this version |
准确说是 beta2 Swift version 1.0 (swift-600.0.34.4.8) 到 beta3 Swift version 1.0 (swift-600.0.38.7) 的变化。
对了,补充下。 beta1 Swift version 1.0 (swift-600.0.34.4.5) 到 beta2 几乎没有什么变化。
语法
nil 成为关键字。
[KeyType : ValueType] 可以表示字典类型 Dictionary<KeyType, ValueType>。
[Type] 用于表示原 Array 类型 Type[],等价 Array<T>,原用法会导致警告。
增加 @noinline 属性
.. 运算符改为 ..<,不容易和 ... 混淆。
函数、类型
原 sort() 改名为 sorted()。新增 sort() 函数,参数为 inout。
Index 类型中的 .succ() 变为 .successor()、 .pred() 变为 .predecessor()。
C/ObjC 交互变化
增加 UnsafeMutableArray<T> 类型。
增加 CFunctionPointer<T> 类型。
删除 CConstVoidPointer、 CMutableVoidPointer。替换为 UnsafePointer<()>、ConstUnsafePointer<Int32>。
删除 CConstPointer<T>、CMutablePointer<T>。替换为 UnsafePointer<T>、ConstUnsafePointer<T>。
这么一来指针操作简单了好多。原有会出现 COpaquePointer 的不合理情况,也都对应到适合的类型。
CString 可以从 UnsafePointer<UInt8> 和 UnsafePointer<CChar> 两种类型构造获得,之前只支持 UInt8。
module.map 中头文件声明转换为 Swift 声明不再使用 C 兼容类型,直接使用 Swift 相应类型。原有 CInt,现在成为 Int32。
结构体会自动添加构造函数 init(field1:field2:...) 这样。
nil
去掉了 NilType,增加了 NilLiteralConvertible, nil 成为关键字。可以认为是 nil 常量。
protocol NilLiteralConvertible {
class func convertFromNilLiteral() -> Self
}
除了 Optional 、上面所提到的指针类型外,RawOptionSet 也实现了该协议。
Array
去掉了 .copy()、unshare() 方法。
增加了以下方法:
func makeUnique(inout buffer: ArrayBuffer<T>, e: T, index: Int)
func sorted(isOrderedBefore: (T, T) -> Bool) -> Array<T>
看起来 Array 对底层容器的引用有了更好的控制 ArrayBufferType 增加了判断方法 func isMutableAndUniquelyReferenced() -> Bool。
Array 目前可以认为是真正的值类型。
指针
增加了 _Pointer protocol
protocol _Pointer {
var value: RawPointer { get }
init(_ value: RawPointer)
}
表示一个类型可以对应到原生指针。
同时成为内部桥接类型,编译器内部在转换时使用它(取出 RawPointer, 构造具体指针类型)。
模块
增加了 StdlibUnittest 模块。 声明代码。单元测试终于有了。