首页 >Swift

Swift 3.0.1 的两个小改动:SE-139,SE-140

2016-12-31 21:06 编辑: AllanHou 分类:Swift 来源:没故事的卓同学投稿

原文

3.0.1中主要有三个新feature:SE-138,SE-139,SE-140

SE-138:新增两个底层指针类型

标准库增加了两个指针类型:UnsafeRawBufferPointer 和 UnsafeMutableRawBufferPointer 。具体使用可以参照:UnsafeRawPointer Migration Guide。在某些场景下使用UnsafeRawBufferPointer替代 UnsafeBufferPointer会安全的多。对于处理二进制和I/O流有很大帮助。

SE-139:所有数据类型在OC中使用时映射为NSNumber

原先只有Int、UInt和Double映射到OC时会被映射为NSNumber,其他数据类型比如UInt8则不会。
现在统一把Swift中所有的数据类型都映射为NSNumber:

  • Int8

  • Int16

  • Int32

  • Int64

  • UInt8

  • UInt16

  • UInt32

  • UInt64

  • Float

  • Double

Cocoa 中结构体支持转换成NSValue的映射时全都转为NSValue:

  • NSRange

  • CGPoint

  • CGVector

  • CGSize

  • CGRect

  • CGAffineTransform

  • UIEdgeInsets

  • UIOffset

  • CATransform3D

  • CMTime

  • CMTimeRange

  • CMTimeMapping

  • MKCoordinate

  • MKCoordinateSpan

  • SCNVector3

  • SCNVector4

  • SCNMatrix4

这对于原来Cocoa中一些本来就要求NSValue的属性提供了很大的便利。比如CAKeyframeAnimation中的values属性:

Depending on the type of the property, you may need to wrap the values in this array with an NSNumber of NSValue object. For some Core Graphics data types, you may also need to cast them to id before adding them to the array.

SE-140:Optional 类型转为Any时警告是否要解包

OC中的id类型对应Swift中的Any。原来在Optional类型转换为Any后,OC中方法声明的nonnull id检查不会生效。因为已经是一个Any的值了,虽然这个值里面包的是一个nil。这也带来了潜在的危险。所以现在对于原来OC中的参数要求是nonnull id类型,对于Optional会进行解包警告。
比如这样的代码:

let x: Int? = 3
let mutalArray = NSMutableArray()
mutalArray.add(x)

会有警告:

24.png

会警告需要进行解包。
如果你本来就是要这样的行为,需要显示的类型转换为Any

mutalArray.add(x as Any)

相关链接:

搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿   收藏文章
上一篇:制作Swift和Objective-C Mixed的Pod
下一篇:用RxSwift仿写知乎日报
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部