swift Swift 高階 10個技巧

2021-07-24 23:43:08 字數 4185 閱讀 7763

聽說你已經學習swift幾個月了,有沒有想更進一步成為swift高手的想法?我這裡有10招秘技,各位施主且聽我慢慢道來,結個善緣。

1. 擴充套件(extension)

任務: 求數字的平方。

// 菜鳥版

func

square

(x: int)

-> int

var squaredoffive = square(x: 5)

square(x: squaredoffive) // 625

為了求5的四次方我們被迫建立變數 squaredoffive — 高手可不喜歡被迫定義乙個無用的變數。

// 高手版

extension

int}

5.squared // 25

5.squared.squared // 625

2. 泛型(generics)

任務:列印輸出陣列內所有的元素。

// 菜鳥版

var stringarray = ["蒼老師", "範老師", "優衣庫"]

var intarray = [1, 3, 4, 5, 6]

var doublearray = [1.0, 2.0, 3.0]

func

printstringarray

(a: [string]) }

func

printintarray

(a: [int])

}func

printdoublearray

(a: [double])

}

居然要定義這麼多函式? 菜鳥能忍高手不能忍!!!

// 高手版

func

printelementfromarray

(a: [t])

}

3. for 遍歷 vs while 遍歷

任務:列印 5 次 陸家嘴

// 菜鳥版

var i = 0

while

5 > i

被迫定義了變數 i 來確保列印 陸家嘴 5 次。

注意定義越多的變數,越多的潛在風險,越多的生活問題。這就是蝴蝶效應,你難道想x生活不和諧?

// 高手版

for _ in 1...5

上面的**實在是簡潔,美妙。

4. gaurd let vs if let

任務 : 讓我們寫個歡迎新使用者的程式。

var myusername: double?

var mypassword: double?

// 菜鳥版

func

userlogin()

}}

這些令人討厭的巢狀**,我們要消滅它

// 高手版

func

userlogin

()

print("優衣庫歡迎, \(username)!")

}

注意這裡如果myusername 或 mypassword nil,都會提前結束,否則就會列印 「優衣庫歡迎, ***」

5. 計算屬性 vs 函式

任務:計算圓的直徑

// 菜鳥版

func

getdiameter

(radius: double)

-> double

func

getradius

(diameter: double)

-> double

getdiameter(radius: 10) // return 20

getradius(diameter: 200) // return 100

getradius(diameter: 600) // return 300

上面我們建立了2個毫無關係的函式,可是直徑和周長兩者真的沒有關係嗎?

// 高手版

var radius: double = 10

var diameter: double

set

}radius // 10

diameter // 20

diameter = 1000

radius // 500

現在半徑和直徑相互依賴,真實地反應了兩者的關係。

記得上面說的蝴蝶效應嗎? 越少的依賴,**越簡潔,問題越少,生活越美好!

6. 列舉 - 型別安全

任務:賣門票

// 菜鳥版

switch

"adult"

「adult」, 「child」, 「senior」 這裡都是硬編碼,你每次需要輸入手動輸入這些字元,記得我們上面講到的嗎? 手動鍵入越少,錯誤越少,生活越美好。

// 高手版

enum

people

switch

people.adult

這樣你就避免了不小心輸入錯誤的問題,因為 「.adult」, 「.child」, 「.senior」 被定義成了enum', 任何不在預定義範圍內的例項都會被xcode毫不留情的指出來,合理利用整合開發環境是高手必備的。

7. 空合運算子

任務: 使用者選擇微博主體顏色。

// 菜鳥版

var userchosencolor: string?

var defaultcolor = "red"

var colortouse = ""

iflet color = userchosencolor else

這也太臃腫了吧,讓我們來減**。

// 高手版

var colortouse = userchosencolor ?? defaultcolor

稍微解釋一下, 如 userchosencolor 為 nil, 則選擇 defaultcolor, 否則則userchosencolor.

其實空合運算子是對以下**的簡短表達方法。

a != nil ? a! : b
8. 三目運算子

ex) 有雞冠頭的人身高增加5厘公尺。

// 菜鳥版

var currentheight = 185

var hasspikyhair = true

var finalheight = 0

if hasspikyhair else

太囉嗦,還是需要減**!

// 高手版

finalheight = currentheight + (hasspikyhair ? 5: 0)

如果是雞冠頭,就增加 5 厘公尺高度,否則增加 0 厘公尺。

9. 函式式程式設計

任務: 獲取偶數。

// 菜鳥版

var newevens = [int]()

for i in 1...10

}print(newevens) // [2, 4, 6, 8, 10]

這種for迴圈真是冗長,讓人看的昏昏欲睡。

// 高手版

var evens = (1...10).filter

print(evens)

// [2, 4, 6, 8, 10]

有沒有感覺函式式程式設計讓你看起來聰明多了。

10. 閉包 vs 函式

任務: 求兩個數字的和。

// 菜鳥版

func

sum(x: int, y: int)

-> int

var result = sum(x: 5, y: 6) // 11

為了這個功能我還需要記住函式名 和 變數名? 能不能少乙個呢?

// 高手版

var sumusingclosure: (int, int) -> (int) =

sumusingclosure(5, 6) // 11

十條技巧講述完畢,打完收工。

推薦閱讀:

10 高階元件

目的 實現狀態邏輯復用 採用 包裝 裝飾 模式,比如說 手機殼 手機 獲取保護能力 手機殼 提供保護能力 高階元件 就相當於手機殼,通過包裝元件,增強元件功能 高階元件 hoc,higher order component 是乙個函式,接收要包裝的元件,返回增強後的元件 1.建立乙個函式,名稱約定以...

10 高階函式

乙個最簡單的高階函式 def add x,y,f return f x f y 當我們呼叫add 5,6,abs 時,引數x,y和f分別接收 5,6和abs,根據函式定義,我們可以推導計算過程為 x 5 y 6 f abs f x f y abs 5 abs 6 11 return 11 add 5...

10 函式高階

今日主要內容 1.動態傳參 重點 形參 聚合 位置引數 元組 關鍵字 字典 實參 打散 列表,字串,元素 字典 形參順序 重點 位置,args,預設值,kwargs 無敵傳參 def func args,kwargs arguments引數 keyword arguments關鍵字引數 pass 2...