1. Classes vs. Structures
classes和structures在Swift里有很多共同點挫剑,他們都可以:
- 定義屬性(properties)
- 定義方法(methods)
- 定義下標(subscripts)
- 定義初始化器(initializers)
- 可以被延展(extension)
- 可以繼從協(xié)議(protocol)
他們的區(qū)別有:
- class有繼承性(Inheritance)错妖;
- class可以進行type casting;
- 若要修改屬性的值,structure里的函數(shù)需加
mutating
關鍵字; - class的類方法用
class
關鍵字,structure用static
; - struct是值類型(Value Types)砚婆,賦值時傳遞變量一個copy;class是引用類型(Reference Types)突勇,賦值時傳遞指針装盯;
Swift中String、Array甲馋、Dictionary等都是struct類型埂奈。
那我們應該什么時候使用structure類型呢?蘋果官方給出了如下指示:
- 需要封裝簡單的數(shù)據類型時摔刁;
- 希望傳遞其值而非指針時挥转;
- 其屬性也是值類型時;
- 不需要從其他類型繼承屬性或行為時共屈。
2. Any vs. AnyObject
- Any可以代表任何類型的實例绑谣,包括函數(shù);
- AnyObject可以代表任何類類型的實例(class type)拗引。
具體請參考蘋果官方Doc借宵。