Swift 3 新特性 2.
2018-11-08 本文已影响0人
Maserati丶
课程来自慕课网liuyubobobo老师
Swift3的主要变化
- API命名原则
- 第一个参数和后面参数的处理方式变得一致
- 大量使用用介词表示参数的意义
- 大量删除了没有意义的名词
let arr = [1,2,3,4,5] arr.index(of: 3) // 3
- 创建自己的函数
- 外部参数名和内部参数名
- 参数关键字不再使用var而是使用let
- inout关键字 写在参数后面
func swapTwoInts(_ a: inout Int , _ b : inout Int) { (a,b) = (b,a) }
- 多个含有默认值的参数的调用需要按顺序
func welcome(title: String = "Welcome", message: String = "Hello", name: String = "Guest") -> String { return title + "!" + message + " " + name + "!" } welcome(title: "Hello", message: "Good morning", name: "Owen") //Hello!Good morning Owen welcome(title: "Good morning", name: "Owen") //Good morning!Hello Owen!
- 表意更清晰的函数类型
- 函数类型的参数必须用括号括起来
// (Int) -> (Int) -> Int 参数为Int 输出为函数(Int) -> Int // ((Int) -> Int) -> Int 参数为函数(Int) -> Int 输出为Int //(Int, Int) -> Int 参数为两个Int 输出为Int // ((Int, Int)) -> Int 参数为元祖(Int, Int) 输出为Int
- 明确表示一种方法,在方法后面列出参数
class StudentList { var students: [String] init(students: [String]){ self.students = students } func addStudent(name: String, at index: Int) { self.students.insert(name, at: index) } func addStudent(name: String, after student: String) { if let index = self.students.index(of: student){ self.students.insert(name, at: index) } } } let list = StudentList(students:["A","B","C","D"]) let f = list.addStudent(name:at:) f("Owen",3) list // ["A","B","C","Owen","D"]
- 动词和名词
// 尾缀 ~ed 表示过去式 ~ing 表示名词:有返回值,不影响原对象 // 没有这些尾缀,则为动作,直接作用于原对象 var scores = [92,80,100,95] scores.sorted() scores // [92,80,100,95] scores.sort() scores // [90,92,95,100]
- 枚举类型的变化
// 枚举类型下的分量首字母变为小写 UIStatusBarStyle.lightContent
- where的变化
// 使用 , 代替 where 进行约束 func doMath(a: Int?, b: Int?, c: Int?) -> Int?{ guard let a = a, let b = b, let c = c, a > 0, b<=0, c%2 == 0 else{ return nil } return 0 } // where语句使用位置修改,使可读性更强 func anyCommonElements<T: Sequence, U: Sequence>(lhs: T, _rhs: U) -> Bool where T.Iterator.Element: Equatable, T.Iterator.Element == U.Iterator.Element { return true }
- 摒弃C风格函数
// 更多的使用面向对象的风格 // 一些NS前缀的类删除了NS前缀