Swift面試題收集和個人解答(長期更新)

一銘發表於2017-12-13

這份面試題是上海某網際網路公司 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),在外部只能訪問

相關文章