1. 方法有哪兩種?都可以定義在枚舉、結(jié)構(gòu)體、類中嗎?
-
實(shí)例方法(Instance Method):通過實(shí)例調(diào)用 -
類型方法(Type Method):通過類型調(diào)用,用static或者class關(guān)鍵字定義
2. self 在實(shí)例方法和類型方法中代表什么?
- 在實(shí)例方法中代表
實(shí)例 - 在類型方法中代表
類型
3. 說一下 mutating 關(guān)鍵字的作用?
- 結(jié)構(gòu)體和枚舉是值類型,默認(rèn)情況下,值類型的屬性不能被自身的實(shí)例方法修改
- 在
func關(guān)鍵字前加mutating可以運(yùn)行這種修改行為

mutating
4. 如何給任意類型(枚舉、結(jié)構(gòu)體、類),添加下標(biāo)功能?
- 使用
subscript可以給任意類型(枚舉、結(jié)構(gòu)體、類)增加下標(biāo)功能,有些地方也翻譯為:下標(biāo)腳本 -
subscript的語法類似于實(shí)例方法、計(jì)算屬性 -
subscript的本質(zhì)就是方法(函數(shù))
5. swift 中類型支持繼承?哪些不支持繼承?
-
枚舉和結(jié)構(gòu)體不支持繼承,只有類支持繼承
6. 什么是基類? Swift 中的基類和 OC中的基類一樣嗎?
- 沒有父類的類,稱為:
基類 - Swift 并
沒有像 OC、Java 那樣的規(guī)定:任何類最終都要繼承自某個(gè)基類
7. 子類可以重寫父類的什么?重寫必須要用什么關(guān)鍵字?
-
一般情況下,子類可以重寫父類的下標(biāo)、方法、屬性 - 重寫必須加上
override關(guān)鍵字 - 使用
override關(guān)鍵字其實(shí)是 Swift 很好的特點(diǎn),這樣一看就知道這個(gè)方法是重寫了父類的,非常明確
8. 類型方法可以重寫嗎?(分兩種情況)
- 被
class修飾的類型方法、下標(biāo),允許被子類重寫 - 被
static修飾的類型方法、下標(biāo),不允許被子類重寫
9. 重寫屬性的時(shí)候,有哪些注意點(diǎn)?(至少說三點(diǎn))

重寫屬性
10. 子類可以為父類的存儲(chǔ)屬性和計(jì)算屬性添加屬性觀察器嗎?
- 一般情況下,可以添加屬性觀察器
- 特殊情況:
只讀屬性和 let 屬性,不能添加屬性觀察器
11. 如果不希望屬性被重寫、或者類被繼承,你要怎么做?
- 被
final修飾的方法、下標(biāo)、屬性,禁止被重寫 - 被
final修飾的類,禁止被繼承