標籤:
1. 可選類型是一種類型,String?就是Optional<String>,所以函數參數也可以聲明為它
2. a??b??c 如果a有值返回a,a為nil返回b,b也也為nil,前面的整體結果就是nil返回c.條件是??前面的都必須是optional的,??後面的類型必須和??前面的一致,結果等價於三目運算子a!=nil?a!:b
3. 遵從GeneratorType協議的對象有一個next方法可以用來遍曆,你可以自訂generator遵循generatorType協議,自己就可以根據這個方法做迴圈,你在next方法中寫好遍曆的順序就好.
4. 遵從SequenceType協議的對象可以用for in來迴圈,每個SequenceType對象裡麵包含對應著一個generator,也可以擷取generator後做while迴圈,也可以直接寫for in迴圈,for in出來每項的值就是generator中next方法的傳回值
5. 區間運算子...和..<其實是Range<T>類型的對象,這個對象有一個generate方法,返回的是RangeGenerator<T>類型結構體,它遵循GeneratorType協議,所以...和..< 也能做for in 迴圈
6. 數組過濾方法可以用閉包,如:oldArray.filter{ $0 > 30 },數組還有個根據數組值計算的的方法,oldArray.reduce(1,combine: {$0 + $1}) 結果就是1和數組中的每個元素相加
7. Int和string都有map方法,someName.map{name in "Hello,\(name)"}??"Hello world!" name是個可選類型,你不需要做可選綁定,如fil果name是nil,這個map方法返回的值也是nil
8. 函數的柯裡化就是多參函數變成一個參數調用的傳回值是函數,再調用的這個函數傳入第二個參數,這中間得到的函數叫外部這個函數的偏函數,函數柯裡化只需要把函數的多個參數分別寫在不同的括弧裡就可以了
9. 在類命名訪問成員方法,得到的是一個可以函數柯裡化的函數,第一個參數是類對應的對象,後面的參數就是這個函數應該有的參數
10. swift的枚舉可以有相關值(就是傳參),有相關值的兩個枚舉值不能用==比較,需要自己重載==運算子,而普通的枚舉是可以通過==比較的
11. 枚舉是可以有原始值的(預設值),可以是String,Character,Int,Float類型的,如果是Int後面的枚舉會遞增,通過rowValue可以擷取到原始值
12. 由於swift初始化方法的安全檢查太嚴格,在設定類似於資料來源數組的時候可以用lazy 聲明,並用閉包傳回值
13. Any表示任何類型除了方法類型,AnyObject表示任何class類型的執行個體
14. 在協議前加@objc表示協議可選,它只對class有效;在方法和屬性前加optional表示屬性和方法可選protocol<SomeProtocol,AnotherProtocol>就可以表示遵循這兩個協議的對象
Swift文法總結補充(一)