首頁>科技>

前言

說到Swift不得不提一下Objective-C。

Objective-C作為和C++同一時代的語言,是蘋果和Smalltalk生下的孩子,它寄託了蘋果無盡的期望。

然而時代在發展,人們通過無數次實踐總結出了各種程式設計思想。Objective-C那詭異的中括號和動態語言的弊端,讓蘋果背了越來越多的技術債。大號煉廢了就開個小號。

於是蘋果總結了現代各種語言的特性,各種程式設計思想,各種基因摻雜培育出了Swift。同樣Swift寄託了蘋果無盡的期望,與此同時承諾依舊不會拋棄Objective-C這個孩子。(當然現實就是這麼殘忍,Objective-C被拋棄的命運是註定的,哪怕依舊有很多它的粉絲,但是一旦親爹都不想養了,光靠粉絲接濟是沒用的)

由於Swift身上有很多其他語言的基因,以至於很多吃瓜群眾對Swift有很深的誤解,有的人認為它是一門指令碼語言,有的人認為它是OC的一個語法糖,有的人認為它的速度很慢。

實際上和JS這種十幾天就誕生出來的語言不同。Swift包含了很多細節性的設計,每一個語法都是經過不斷地推敲和演練的。經歷過Swift演變升級到現在的穩定Swift5的人應該都懂。

這兩天靜極思動,面了幾家試,發現招聘軟體上已經開始有專門招Swift程式設計師的公司。

不過發現很多面試官問的最最最的問題就是 類和結構體的區別是什麼。。。還有什麼是面向協議。然後就沒了。。。

仔細想了想要想區分Swift程式設計師的能力,光靠這兩個問題是絕對不行的。有很多問題可以問(下面問題深度順序比較亂,難度不是依次遞增的):

1.類和結構體的區別是什麼

這個問題很多面試官問的時候更多時候想要得到的答案是

類和結構體的 建立方式一個在堆一個在棧,或者類是引用型別 結構體是值型別 這種只要是Swifter都懂得答案。

但是其實也可以深入的問一下,比如類和結構體的 編譯方式區分,分類和類的編譯方式區分,Swift為什麼要在有類的同時又設計了結構體和列舉。等等

2.寫時拷貝機制

Swift本身是很建議程式設計師少用類 多用結構體 列舉。但是使用結構體的時候,寫時拷貝如果不清楚的話,很容易寫出效能不是很好的程式碼。如果是對演算法要求高的公司寫時拷貝機制是必問的。

3.模式匹配

其他語言使用Switch語法或多或少 都有這樣那樣的限制,Swift的Switch就不一樣,除了對列舉 數字 字串 Switch,還可以對任意的實現了~=運算子的物件 Switch。還支援where子句、匹配範圍、型別推斷轉換。。。等等。如此強大的Switch,面試不深入問一下豈不是可惜。

4.協議

Swift的一大亮點就是面向協議開發,程式設計師可以 對協議擴充套件預設實現。不但能實現其他語言的類似多繼承的效果、而且面向協議開發能對程式碼帶來極大的擴充套件性。

5.泛型

Swift的泛型感覺真的是做到了極致了,Swift標準庫裡面用到了大量的協議和泛型。

如果想招個有點水平的Swift開發、泛型豈能不問。

泛型除了問 where泛型約束 這些,也可以問下為什麼Swift標準庫比如 swap map

這些函式為什麼要用到泛型,只用協議有什麼弊端。

@_specialize也可以問下

6.運算子、下標、字面量協議、尾隨閉包

這幾個特性可以讓Swift實現很多語法級別的擴充套件、也可以問下。

7.Optional、變數常量、型別檢查、擴充套件

現代語言設計有很多必選項。Kotlin和Swift有很多相似之處,各有所長。但是他們不約而同的設計了類似於Optional這些特性,主要還是因為這些特性都是太多人踩過坑,踩出來的經驗。舊時代語言大體定型,不好大改,新時代語言設計之初肯定會考慮這些特性。

8.函數語言程式設計

什麼函子、單子 使勁問、函式是第一公民之類的也都是必問的。

9.響應式程式設計

可以問問RxSwift、也可以問問蘋果新出的Combine,思想都一樣。比如響應式程式設計在網路請求,資料解析,UI響應 等等各個方面的表現

10.單向資料流模式

結合Redux問問單項資料流的一些流程原理。(Swift版的有個ReSwift或者RxFeedback等等)

11.MVC、MVVM、Coordinator、單向資料流

這些模式用法千人千面,沒有標準答案,都可以深入探討

12.SwiftUI

13.Swift5.1新特性

比如@propertyWrapper、@_functionBuilder、@dynamicMemberLookup每一個都值得探討

14.Swift在其他領域的擴充套件

比如探討下Swift在Web、後端開發上面的思路、探討下Swift在人工智慧上面有什麼語法的優越性、以及Swift在直接使用其他語言所寫的庫的可行性思路。

結語

大概想了這麼十多個問題,還有很多優秀的特性和麵試問題,數不勝數。

總體而言,Swift是一門入門有點小門檻,深入學習有個大門檻的語言,難學難精。很容易區分程式設計師的水平,兩個程度不同的程式設計師寫出的Swift程式碼 從美觀性、效能上面很容易就能看出差距。

但是一旦把Swift的設計理念 理清楚,想清楚為什麼這樣設計,會發現一通百通,Swift學會,其他語言也就那麼回事。

最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 中國科技企業崛起?4位年輕人上榜世界富豪!傳統產業退位讓賢