加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift 3 新特性

发布时间:2020-12-14 06:37:47 所属栏目:百科 来源:网络整理
导读:函数和方法的第一个参数总是有标签,除非使用“_”来省掉 func method(fromX x: Int,toY y: Int) {}method(fromX: 0,toY: 0)func method2(_ x: Int,y: Int) {}method2(0,y: 0)func method3(x: Int,y: Int) {}method3(x: 0,y: 0)// old: typealias CompleteHa

函数和方法的第一个参数总是有标签,除非使用“_”来省掉

func method(fromX x: Int,toY y: Int) {}
method(fromX: 0,toY: 0)
func method2(_ x: Int,y: Int) {}
method2(0,y: 0)
func method3(x: Int,y: Int) {}
method3(x: 0,y: 0)
// old: typealias CompleteHandler = (token: String,error: Error?) -> Void
typealias CompleteHandler = (_ token: String,_ error: String?) -> Void

OC API中的id现在都转到了Any,而不再是AnyObject。

Swift的Any类型可以处理任何类型(包括枚举,结构体,元组,类),AnyHashable可以作为Set,Dictionary的键
NSArray,NSDictionary,NSSet分别对应[Any] [AnyHashable:Any] Set[AnyHashabel]
NSCopying,NSMutableCopying协议的copy(with:),mutableCopy(with:)都返回Any

fileprivate & private

新增加fileprivate,如果用来标记类的方法和属性,private变成只能在class类定义内使用,不能在extension中使用;而fileprivate即以前的private,可以在本文件内的extension中使用。

许多早期库函数被省掉了多余部分

UIColor.black   // old: blackColor
var array = ["hello","world"]
array.insert("haha",at: 2) // old: atIndex

枚举值使用“小骆驼拼写法”

NSTextAlignment.right

动词和名词的使用更加一致(加ed,ing后缀认为是名词)

array.enumerated() // n.返回一个枚举的拷贝,old: enumerate()
array.sort() // v.将自己排序
array.sorted() // n.返回一个排序好的拷贝

函数的定义和使用都要加上括号

func g(a: Int) -> Int { return 1 }
func g3(a: (Int) -> Int) -> (Int) -> Int { return g }
// old: func g2(a: Int -> Int) -> Int -> Int { return g }

基础类中去除了OC风格的前缀NS

let date = Date() // NSDate()

函数形参取消了var,inout修饰置于":"后

// func foo(var i: Int)会报错
func foo(i: Int) {} // i是let的,不能被改变
func foo2(i: inout Int) {}

协议的可选方法也需要加上@objc

@objc protocol MyProtocol {
    @objc optional func func1() // old: optional func func1()
}

取消一些C风格

  • 移除++,--操作符 i++; i--;

  • 移除C风格for循环 for var i = 0; i < 10; i += 1 {}

  • 移除XXMake()这种创建方式 如,CGRectMake

let rect = CGRect(x: 0,y: 0,width: 100,height: 100)
  • GCD,Core Graphics取消C风格

let queue = DispatchQueue(label: "com.test.myqueue")
queue.async {
    print("haha")
}
  • 一些常量定义移到枚举内部

UserDefaults.didChangeNotification // old: NSUserDefaultsDidChangeNotification

闭包escaping

swift3中,函数参数的默认闭包是非逃逸的,不需要加@noescape,如果是逃逸闭包需要添加@escaping。

启用全模块编译优化(WMO)

可以提升编译性能,减少编译时间,在Release模式下开启,Debug下不推荐。
Build Settings/Swift Compiler - Optimization Level下设置

引用:

Swift3.0 Release

XCode8.1 Release Note

全模块编译优化

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读