當前位置:
首頁 > 最新 > Swift面試題(1)

Swift面試題(1)

算是自己刷面試題總結的自己不是那麼熟的知識點吧。

1.什麼時候使用@objc:

@objc用途是為了在Objective-C和Swift混編的時候,能夠正常調用Swift代碼.可以用於修飾類,協議,方法,屬性.

常用的地方是在定義delegate協議中,會將協議中的部分方法聲明為可選方法,需要用到@objc

2.下面的代碼都用了哪些語法糖:

[1,2,3].map{ $0 * 2 }

[1,2,3]使用了,Array實現的ExpressibleByArrayLiteral協議,用於接收數組的字面值

map使用了閉包作為作為最後一個參數時,可以直接寫在調用後面,而且,如果是唯一參數的話,圓括弧也可以省略

閉包沒有聲明函數參數,返回值類型,數量,依靠的是閉包類型的自動推斷

閉包中語句只有一句時,自動將這一句的結果作為返回值

$0在沒有聲明參數列表的時候,第一個參數名稱為$0,後續參數以此類推

3.定義靜態方法時關鍵字static和class有什麼區別:

static定義的方法不可以被子類繼承,class則可以

4.什麼時候使用final:

不允許class被繼承

不允許函數被重寫

5.訪問許可權則依次為:open,public,internal,fileprivate,private:

http://www.cocoachina.com/swift/20160926/17634.html

6.類(class)和結構體(struct)有什麼區別?

Swift 中,類是引用類型,結構體是值類型。值類型在傳遞和賦值時將進行複製,而引用類型則只會使用引用對象的一個"指向"。所以他們兩者之間的區別就是兩個類型的區別。

7.try? 和 try!是什麼意思:

** try? ** 是用來修飾一個可能會拋出錯誤的函數。會將錯誤轉換為可選值,當調用try?+函數或方法語句時候,如果函數或方法拋出錯誤,程序不會發崩潰,而返回一個nil,如果沒有拋出錯誤則返回可選值

** try! ** 會忽略錯誤傳遞鏈,並聲明「do or die」。如果被調用函數或方法沒有拋出異常,那麼一切安好;但是如果拋出異常,二話不說,給你崩。

8.String 與 NSString 的關係與區別:

Swift 的String類型與 Foundation NSString類進行了無縫橋接。他們最大的區別就是:String是值類型,而NSString是引用類型。

其他方面的差異就體現在各自api 上的差異。

9.請說明並比較以下關鍵詞:strong, weak, unowned:

Swift 的內存管理機制與 Objective-C一樣為 ARC(Automatic Reference Counting)。它的基本原理是,一個對象在沒有任何強引用指向它時,其佔用的內存會被回收。反之,只要有任何一個強引用指向該對象,它就會一直存在於內存中。

strong 代表著強引用,是默認屬性。當一個對象被聲明為 strong 時,就表示父層級對該對象有一個強引用的指向。此時該對象的引用計數會增加1。

weak 代表著弱引用。當對象被聲明為 weak 時,父層級對此對象沒有指向,該對象的引用計數不會增加1。它在對象釋放後弱引用也隨即消失。繼續訪問該對象,程序會得到 nil,不虧崩潰

unowned 與弱引用本質上一樣。唯一不同的是,對象在釋放後,依然有一個無效的引用指向對象,它不是 Optional 也不指向 nil。如果繼續訪問該對象,程序就會崩潰。

加分回答:

weak 和 unowned 的使用場景有如下差別:

當訪問對象時該對象可能已經被釋放了,則用 weak。比如 delegate 的修飾。

當訪問對象確定不可能被釋放,則用 unowned。比如 self 的引用。

實際上為了安全起見,很多公司規定任何時候都使用 weak 去修飾。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

普通投資者如何戰勝專業投資機構

TAG:全球大搜羅 |