這份面試題是上海某網際網路公司 iOS 的面試題,同時歡迎把各位發 swift 的面試題給我
####1.swift中,如何阻止一個方法屬性,屬性,下標被子類改寫?
在類的定義中使用final關鍵字宣告類、屬性、方法和下標。final宣告的類不能被繼承,final宣告的屬性、方法和下標不能被重寫。
####2.swift中,實現一個將整形陣列全部轉化成對應的字串陣列(eg: [1,2,3,4,5] -> ["1","2","3","4","5"])
var sampleArray: [Int] = [1,2,3,4,5]
sampleArray.map {
String($0)
}
//["1", "2", "3", "4", "5"]
複製程式碼
####3.swift中,關鍵字 guard 和 defer 的用法 guard也是基於一個表示式的布林值去判斷一段程式碼是否該被執行。與if語句不同的是,guard只有在條件不滿足的時候才會執行這段程式碼。
guard let name = self.text else { return }
複製程式碼
defer的用法是,這條語句並不會馬上執行,而是被推入棧中,直到函式結束時才再次被呼叫。
defer {
//函式結束才呼叫
}
複製程式碼
####4.使用 swift 中的泛型來編寫一段交換兩個值的函式
func swapValue<T,U>(inout x: T, inout y: U) -> (x: U, y: T) {
return (y, x)
}
var tuple = ("ab", 1)
swapValue(&tuple.0, y: &tuple.1)
//(1, "ab")
//這塊我自己對泛型瞭解不深,會繼續更新
---Swift 3更新:
func swapValue<T,U>(x: T, y: U) -> (x: U, y: T) {
return (y, x)
}
複製程式碼
####5.在 swift 中,對一個 optional 變數拆包有多少種辦法? 如果確定一個 optional 包含值,可以用 ! 來訪問,就是強制拆包. 嘗試使用!來訪問不存在值的optional value 會觸發執行時錯誤。當!來強制拆包(force-unwrap)的時候, 一定要確保這個optional value一定包含一個非nil 值。
隱式拆包: 通過在宣告時的資料型別後面加(!)來實現
var str: String! = "Hello World!"
//Hello World!
複製程式碼
更新, 感謝分享題目
####6. swift中怎麼調OC程式碼
在swift專案中建立一個OC檔案的時候,Xcode 會提示建立一個橋接檔案 點確定建立橋接檔案,Xcode會自動建立一個橋接檔案
工程名-Bridging-Header.h
把swift需要用到的OC檔案的標頭檔案放到橋接檔案裡 工程名-Bridging-Header.h
####7. open關鍵字和public關鍵字區別
鑑於當前寫時候是 Swift3.x, 現在共有5種許可權控制關鍵字,之後 Swift4 又會有變化.
- open open 修飾的 class 在 Module 內部和外部都可以被訪問和繼承 open 修飾的 func 在 Module 內部和外部都可以被訪問和過載(override)
- Public public 修飾的 class 在 Module 內部可以訪問和繼承,在外部只能訪問 public 修飾的 func 在 Module 內部可以被訪問和過載(override),在外部只能訪問