Swift 3中的新特性

相较于Swift 2.2 , Swift 3做了很大的改动,逐渐脱离OC的影子。
语法上很多对象去掉了NS开头,去掉了繁琐的命名。如 UIColor.redColor() 改为 UIColor.red , 变成了属性,还有方法的第一个参数如果不指定 _调用的时候也要写参数名等等...

本文主要讨论Swift 3中的一些坑和使用过程中的一些小技巧,排名无理由~~

AnyObject 、Any

之前整个项目基本只用 AnyObject 代表大多数实例,基本也不和Any有什么交集。因为Swift 2 针对Int、String 等结构体进行了转换,编译器会自动桥接为NSNumber和NSString这种对象类型 ,在swift3中AnyObject不能表示结构体了 。而 Any 可以代表 struct 、 class 、 func 等几乎所有类型。

fileprivate

在原有的swift中的private其实并不是真正的私有,如果一个变量定义为private,在同一个文件中的其他类依然是可以访问到的。这个场景在使用extension的时候很明显。

class User {
    private var name = "private"
}

extension User{
    var accessPrivate: String {
        return name
    }
}

这样带来了两个问题:

  • 当我们标记为private时,意为真的私有还是文件内可共享呢?
  • 当我们如果意图为真正的私有时,必须保证这个类或者结构体在一个单独的文件里。否则可能同文件里其他的代码访问到。

由此,在swift 3中,新增加了一个 fileprivate来显式的表明,这个元素的访问权限为文件内私有过去的private对应现在的fileprivate。现在的private则是真正的私有,离开了这个类或者结构体的作用域外面就无法访问

不再有CGRectMake,CGSizeMake等常用函数了

UIView(frame: CGRectMake(0, 0, 48, 48))
被改为
UIView(frame: CGRect(x: 0, y: 0, width: 48, height: 48))
// 'CGRectMake' is unavailable in Swift
// let frame = CGRect(0, 20, view.bounds.width, 130)        
// Swift 3.0 不再有CGRectMake,CGSizeMake等常用函数了        
 let frame = CGRect(x: 0, y: 20, width: view.bounds.width, height: 130)

参考文献

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容