Swift 3 新特性 2.

2018-11-08  本文已影响0人  Maserati丶

课程来自慕课网liuyubobobo老师


Swift3的主要变化

  1. API命名原则
    • 第一个参数和后面参数的处理方式变得一致
    • 大量使用用介词表示参数的意义
    • 大量删除了没有意义的名词
    let arr = [1,2,3,4,5]
    arr.index(of: 3)  // 3
    
  2. 创建自己的函数
    • 外部参数名和内部参数名
    • 参数关键字不再使用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!
    
  3. 表意更清晰的函数类型
    • 函数类型的参数必须用括号括起来
    // (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前缀
    
上一篇 下一篇

猜你喜欢

热点阅读