swift 觀念QA === class 和struct 的區別 1. class 為類, struct 為結構體, 類是引用類型, 結構體為值類型, 結構體不可以繼承 struct 是 value type,class 是 reference type。 2. Swift 最棒的特点之一就是它内置了对整体结构的不可变性的支持 不过,真的需要用到可变性时,你应该怎么做呢? A: struct function 要修改自己的屬性要加上mutating關鍵字。 String 與NSString 的關係與區別 NSString 與String 之間可以隨意轉換, String是結構體,值類型, NSString是類,引用類型. 
通常,沒必要使用NSString類,除非你要使用一些特有方法,例如使用pathExtension屬性 associatedtype 的作用 簡單來說就是protocol使用的泛型
例如定義一個列表協議 protocol ListProtcol { associatedtype Element func push(_ element:Element) func pop(_ element:Element) -> Element? } 什麼時候使用final final用於限制繼承和重寫.如果只是需要在某一個屬性前加一個final. 
如果需要限制整個類無法被繼承,那麼可以在類名之前加一個final Optional(可選型) 是用什麼實現的 Optional是一個泛型枚舉
大致定義如下: enum Optional<Wrapped> { case none case some(Wrapped) } 除了使用let someValue: Int? = nil之外,還可以使用let optional1: Optional<Int> = nil來定義 ?? 的作用 可選值的默認值, 當可選值為nil 的時候, 會返回後面的值. 如
let someValue = optional1 ?? 0 lazy 的作用 懶加載,當屬性要使用的時候,才去完成初始化
如 什麼是retain cycle/ Reference Cycle? Swift透過ARC記憶體管理回收沒有被參考到的變數,常數,但有些情形會是物件間 相互參考,雖然失去外部參考。沒有人可以存取,但是記憶體始終不會被釋放。 什麼情況下會發生? 如何解決引用循環 1. 轉換為值類型, 只有類會存在引用循環, 所以如果能不用類, 是可以解引用循環的, 2. delegate 使用weak 屬性. 3. 閉包中, 對有可能發生循環引用的對象, 使用weak 或者unowned, 修飾 如果給Array中的元素(element)是String type, 增加一個extension 我們可以怎麼做? A: 使用where 子句, 限制Element 為String extension Array where Element == String { var isStringElement:Bool { return true } } ["1", "2"].isStringElement //[1, 2].isStringElement// error