答“卓同學(xué)的 Swift 面試題”--下篇

接中篇塑娇,答“卓同學(xué)的 Swift 面試題”--中篇
上篇鏈接:答“卓同學(xué)的 Swift 面試題”--上篇
面試題鏈接:卓同學(xué)的 Swift 面試題

在此篇中蛤织,回答面試題基礎(chǔ)篇的最后13道題:

24. Optional(可選型) 是用什么實(shí)現(xiàn)的
25. 如何自定義下標(biāo)獲取
26. ?? 的作用
27. lazy 的作用
28. 一個(gè)類型表示選項(xiàng)柒桑,可以同時(shí)表示有幾個(gè)選項(xiàng)選中(類似 UIViewAnimationOptions ),用什么類型表示
29. inout 的作用
30. Error 如果要兼容 NSError 需要做什么操作
31. 下面的代碼都用了哪些語法糖
[1, 2, 3].map{ $0 * 2 }
32. 什么是高階函數(shù)
33. 如何解決引用循環(huán)
34. 下面的代碼會(huì)不會(huì)崩潰汗唱,說出原因
var mutableArray = [1,2,3]
for _ in mutableArray {
  mutableArray.removeLast()
}
35. 給集合中元素是字符串的類型增加一個(gè)擴(kuò)展方法屡拨,應(yīng)該怎么聲明
36. 定義靜態(tài)方法時(shí)關(guān)鍵字 static 和 class 有什么區(qū)別
24. Optional(可選型) 是用什么實(shí)現(xiàn)的
  • Optional 是個(gè)枚舉。有兩個(gè)枚舉成員娃胆,Some(T)None
  • 通關(guān)泛型來兼容所有類型
25. 如何自定義下標(biāo)獲取

使用subscript語法

struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}
let threeTimesTable = TimesTable(multiplier: 3)
threeTimesTable[6]  //18
26. ?? 的作用

?? 是空合運(yùn)算符遍希。
比如a ?? b ,將對(duì)可選類型a進(jìn)行為空判斷里烦,如果a包含一個(gè)值凿蒜,就進(jìn)行解封禁谦,否則就返回一個(gè)默認(rèn)值b。
表達(dá)式 a 必須是 Optional 類型废封。默認(rèn)值 b 的類型必須要和 a 存儲(chǔ)值的類型保持一致

27. lazy 的作用

使用lazy關(guān)鍵字修飾struct 或class 的成員變量州泊,達(dá)到懶加載的效果。一般有以下使用場(chǎng)景:

  • 屬性開始時(shí)漂洋,還不確定是什么活著還不確定是否被用到
  • 屬性需要復(fù)雜的計(jì)算遥皂,消耗大量的CPU
  • 屬性只需要初始化一次
28. 一個(gè)類型表示選項(xiàng),可以同時(shí)表示有幾個(gè)選項(xiàng)選中(類似 UIViewAnimationOptions )氮发,用什么類型表示

使用選項(xiàng)集合:OptionSet
具體參見:Swift 中的選項(xiàng)集合

29. inout 的作用

可以讓值類型以引用方式傳遞渴肉,比如有時(shí)需要通過一個(gè)函數(shù)改變函數(shù)外面變量的值,例如:

var value = 50
print(value)  // 此時(shí)value值為50

func increment(inout value: Int, length: Int = 10) {
    value += length
}
increment(&value)
print(value)  // 此時(shí)value值為60爽冕,成功改變了函數(shù)外部變量value的值
30. Error 如果要兼容 NSError 需要做什么操作

想讓我們的自定義Error可以轉(zhuǎn)成NSError仇祭,實(shí)現(xiàn)CustomNSError就可以完整的as成NSError

/// Describes an error type that specifically provides a domain, code,
/// and user-info dictionary.
public protocol CustomNSError : Error {

    /// The domain of the error.
    public static var errorDomain: String { get }

    /// The error code within the given domain.
    public var errorCode: Int { get }

    /// The user-info dictionary.
    public var errorUserInfo: [String : Any] { get }
}

話說這也是從卓同學(xué)的文章摘取來的??: Swift 3必看:Error與NSError的關(guān)系

31. 下面的代碼都用了哪些語法糖
[1, 2, 3].map{ $0 * 2 }
  • 尾隨閉包(Trailing Closures), 如果函數(shù)的最后一個(gè)參數(shù)是閉包,則可以省略 ()
  • 如果該閉包只有一行颈畸,則可以省略 return
  • 類型推斷乌奇,返回值被推斷為Int
  • $0 代表集合的元素
32. 什么是高階函數(shù)
  • 接受一個(gè)或多個(gè)函數(shù)作為參數(shù)
  • 把一個(gè)函數(shù)當(dāng)作返回值
  • 例如Swift中的map flatMap filter reduce
33. 如何解決循環(huán)引用

可以使用 weakunowned

“Use a weak reference whenever it is valid for that reference to become nil at some point during its lifetime. Conversely, use an unowned reference when you know that the reference will never be nil once it has been set during initialization.”
在引用對(duì)象的生命周期內(nèi),如果它可能為nil眯娱,那么就用weak引用礁苗。反之,當(dāng)你知道引用對(duì)象在初始化后永遠(yuǎn)都不會(huì)為nil就用unowned

34. 下面的代碼會(huì)不會(huì)崩潰徙缴,說出原因
var mutableArray = [1,2,3]
for _ in mutableArray {
  mutableArray.removeLast()
}

不會(huì)崩潰试伙。迭代器?不知道咋解釋于样。等搞明白再來填上疏叨。。穿剖。如有知道的蚤蔓,請(qǐng)指教。

35. 給集合中元素是字符串的類型增加一個(gè)擴(kuò)展方法糊余,應(yīng)該怎么聲明
extension Sequence where Iterator.Element == Int {
    //your code
}

protocol SomeProtocol {}
extension Collection where Iterator.Element: SomeProtocol {
    //your code
}
36. 定義靜態(tài)方法時(shí)關(guān)鍵字 static 和 class 有什么區(qū)別
  • staticclass都是用來指定類方法
  • class關(guān)鍵字指定的類方法** 可以被 override **
  • static關(guān)鍵字指定的類方法** 不能被 override **
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秀又,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贬芥,更是在濱河造成了極大的恐慌吐辙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蘸劈,死亡現(xiàn)場(chǎng)離奇詭異昏苏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門捷雕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壹甥,你說我怎么就攤上這事救巷。” “怎么了句柠?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵浦译,是天一觀的道長。 經(jīng)常有香客問我溯职,道長精盅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任谜酒,我火速辦了婚禮叹俏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘僻族。我一直安慰自己粘驰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布述么。 她就那樣靜靜地躺著蝌数,像睡著了一般。 火紅的嫁衣襯著肌膚如雪度秘。 梳的紋絲不亂的頭發(fā)上顶伞,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音剑梳,去河邊找鬼唆貌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛阻荒,可吹牛的內(nèi)容都是我干的挠锥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼侨赡,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蓖租!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起羊壹,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤蓖宦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后油猫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稠茂,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了睬关。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诱担。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖电爹,靈堂內(nèi)的尸體忽然破棺而出蔫仙,到底是詐尸還是另有隱情,我是刑警寧澤丐箩,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布摇邦,位于F島的核電站,受9級(jí)特大地震影響屎勘,放射性物質(zhì)發(fā)生泄漏施籍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一概漱、第九天 我趴在偏房一處隱蔽的房頂上張望丑慎。 院中可真熱鬧,春花似錦犀概、人聲如沸立哑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铛绰。三九已至,卻和暖如春产喉,著一層夾襖步出監(jiān)牢的瞬間捂掰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工曾沈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留这嚣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓塞俱,卻偏偏與公主長得像姐帚,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子障涯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容