swift 基本運算表達

2021-07-25 04:01:39 字數 2609 閱讀 2619

與objective-c相比,同是蘋果公司御用開發語言的swift明顯在語法上要複雜很多,並且同乙個語法功能的寫法也非常多,有時會帶來很多困惑。本文主要關注閉包的用法。swift的閉包與在objective-c 2.0的時候就引入的block語法功能類似,都是乙個能夠捕獲變數的可執行實體。

實際使用中,block的語法都中規中矩:

//定義閉包型別

typedef

void (^blocktype)();

//建立閉包型別的變數

void (^blockvar)();

//建立閉包,簡化寫法

blockvar = ^;

可以看出來,不管是定義閉包還是建立閉包,都是很規則的形式,用^開頭,包含引數列表、返回值型別等。

但作為swift的重點語法閉包來說,就沒這麼簡單了。它在不同場合可以有不同形式的簡寫,下面用示例來說明。

//定義閉包型別

typealias

closuretype = (int, int) -> int

//定義閉包型別變數並建立閉包

var c1: closuretype =

//呼叫閉包

c1(1, 2)

完整的閉包包括引數列表和返回值型別,實現的時候全部放入中,並且用in關鍵字隔開返回值型別和可執行**。

swift相比objective-c擁有更加強大的推導能力,因此在型別已知的情況下,可以省略許多**。比如在閉包型別一定的情況下,可以省略返回值型別、引數列表等。

a. 省略返回值型別

//定義閉包型別

typealias

closuretype = (int, int) -> int

//定義閉包型別變數並建立閉包

var c1: closuretype =

由於c1已經確定擁有整型int返回值,因此可以在實現閉包的時候不寫。

b. 省略引數型別

//定義閉包型別

typealias

closuretype = (int, int) -> int

//定義閉包型別變數並建立閉包

var c1: closuretype =

實際上連引數列表的圓括號也是可以省略的:

//定義閉包型別變數並建立閉包

var c1: closuretype =

swift還提供了位置引數的用法,可以用引數的位置來代替引數名稱:

//定義閉包型別變數並建立閉包

var c1: closuretype =

如果整個閉包中只有乙個有計算結果的語句,並且它的型別與返回值型別相同,甚至可以省略return

//定義閉包型別變數並建立閉包

var c1: closuretype =

閉包可以作為函式引數,並且在作為函式的最後乙個引數時,能夠獲得額外的簡寫方式。

a. 完整形式

//定義閉包型別

typealias

closuretype = (int, int) -> int

//定義使用閉包作為引數的函式

func

compute

(a: int, b: int, c: closuretype)

//呼叫函式

compute(a: 1, b: 2, c: )

b. 簡單省略形式
//呼叫函式

compute(a: 1, b: 2, c: )

c. 作為最後乙個引數,可以不寫到圓括號中
//呼叫函式

compute(a: 1, b: 2)

d. 如果函式只有乙個引數,則連圓括號都可以省略
//定義使用閉包作為引數的函式

func

compute

(c: closuretype)

//呼叫函式

compute

nil合併運算子(??)

return a??b 代表的是如果a的值為nil的時候就取b的值,如果不為nil就取a的值。

位置引數($0,$1等等表示的是第0位的引數和第一位的引數,以此類推)

for迴圈

for index in

1...5

// 1 * 5 = 5

// 2 * 5 = 10

// 3 * 5 = 15

// 4 * 5 = 20

// 5 * 5 = 25

for index in

1..<5

// 1 * 5 = 5

// 2 * 5 = 10

// 3 * 5 = 15

// 4 * 5 = 20

Python 變數,運算表示式

變數 變數不需要先定義,可以直接複製使用 變數可重複儲存不同的資料型別 可同時為多個變數複製,用逗號隔開 a,b a b 不支援自增自減 變數引用計數 相同資料的賦值,會共享同一片空間位址,並非占用乙個新的位址單元,節約記憶體。使用sys模組下的getrefcount 函式檢視變數引用計數 impo...

運算表示式求值模板

表示式計算 使用方法 輸入合法的表示式,加減乘除,可以帶括號,用空格分開數字和符號,1為結束標誌,比如 2 5 3 1 注意 這是用來算具體答案的,不是轉化成字尾表示式輸出的,當然,思想是遞迴建立表示式樹,然後後序遍歷得逆波蘭式,然後用棧計算結果 模板 include include include...

C 實現對數學基本運算表示式的解析

位址如下 前段時間在leetcode上刷題,遇到了很多涉及對字串進行解析的題目。可能是出於這個原因,最近迷戀上了字串的解析問題。數學基本運算表示式的解析就涉及這類問題。所謂數學基本運算表示式的解析就是指給定乙個表示式字串,如1 1,3 9,對這個字串進行解析,從而得到這個表示式的運算結果。數學基本運...