专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
51好读  ›  专栏  ›  Cocoa开发者社区

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

Cocoa开发者社区  · 公众号  · ios  · 2017-01-01 08:18

正文

▲点击上方“CocoaChina”关注即可免费学习iOS开发


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)

会有警告:

会警告需要进行解包。


如果你本来就是要这样的行为,需要显示的类型转换为Any


mutalArray.add(x as Any)


相关链接:



微信号:CocoaChinabbs


▲长按二维码“识别”关注即可免费学习 iOS 开发

月薪十万、出任CEO、赢娶白富美、走上人生巅峰不是梦

--------------------------------------

商务合作QQ:2408167315

投稿邮箱:[email protected]