22 swift開發iOS 下標指令碼

2021-07-28 09:36:52 字數 2924 閱讀 9355

swift 下標指令碼

下標指令碼 可以定義在類(class)、結構體(structure)和列舉(enumeration)這些目標中,可以認為是訪問物件、集合或序列的快捷方式,不需要再呼叫例項的特定的賦值和訪問方法。

舉例來說,用下標指令碼訪問乙個陣列(array)例項中的元素可以這樣寫 somearray[index] ,訪問字典(dictionary)例項中的元素可以這樣寫 somedictionary[key]。

對於同乙個目標可以定義多個下標指令碼,通過索引值型別的不同來進行過載,而且索引值的個數可以是多個。

下標指令碼語法及應用

語法

下標指令碼允許你通過在例項後面的方括號中傳入乙個或者多個的索引值來對例項進行訪問和賦值。

語法類似於例項方法和計算型屬性的混合。

與定義例項方法類似,定義下標指令碼使用subscript關鍵字,顯式宣告入參(乙個或多個)和返回型別。

與例項方法不同的是下標指令碼可以設定為讀寫或唯讀。這種方式又有點像計算型屬性的getter和setter:

subscript(index: int) -> int

set(newvalue) }

例項 1

import cocoa

struct subexample }

let division = subexample(decrementer: 100)

print("100 除以 9 等於 \(division[9])")

print("100 除以 2 等於 \(division[2])")

print("100 除以 3 等於 \(division[3])")

print("100 除以 5 等於 \(division[5])")

print("100 除以 7 等於 \(division[7])")

以上程式執行輸出結果為:

100 除以 9 等於 11

100 除以 2 等於 50

100 除以 3 等於 33

100 除以 5 等於 20

100 除以 7 等於 14

在上例中,通過 subexample 結構體建立了乙個除法運算的例項。數值 100 作為結構體建構函式傳入引數初始化例項成員 decrementer。

你可以通過下標指令碼來得到結果,比如 division[2] 即為 100 除以 2。

例項 2

import cocoa

class daysofaweek

set(newvalue) }

}var p = daysofaweek()

print(p[0])

print(p[1])

print(p[2])

print(p[3])

以上程式執行輸出結果為:

sunday

monday

tuesday

wednesday

用法

根據使用場景不同下標指令碼也具有不同的含義。

通常下標指令碼是用來訪問集合(collection),列表(list)或序列(sequence)中元素的快捷方式。

你可以在你自己特定的類或結構體中自由的實現下標指令碼來提供合適的功能。

例如,swift 的字典(dictionary)實現了通過下標指令碼對其實例中存放的值進行訪問操作。在下標指令碼中使用和字典索引相同型別的值,並且把乙個字典值型別的值賦值給這個下標腳來為字典設值:

import cocoa

var numberoflegs = ["spider": 8, "ant": 6, "cat": 4]

numberoflegs["bird"] = 2

print(numberoflegs)

以上程式執行輸出結果為:

["ant": 6, "bird": 2, "cat": 4, "spider": 8]

上例定義乙個名為numberoflegs的變數並用乙個字典字面量初始化出了包含三對鍵值的字典例項。numberoflegs的字典存放值型別推斷為dictionary。字典例項建立完成之後通過下標指令碼的方式將整型值2賦值到字典例項的索引為bird的位置中。

下標指令碼選項

下標指令碼允許任意數量的入參索引,並且每個入參型別也沒有限制。

下標指令碼的返回值也可以是任何型別。

下標指令碼可以使用變數引數和可變引數。

乙個類或結構體可以根據自身需要提供多個下標指令碼實現,在定義下標指令碼時通過傳入引數的型別進行區分,使用下標指令碼時會自動匹配合適的下標指令碼實現執行,這就是下標指令碼的過載。

import cocoa

struct matrix

subscript(row: int, column: int) -> double

set }

}// 建立了乙個新的 3 行 3 列的matrix例項

var mat = matrix(rows: 3, columns: 3)

// 通過下標指令碼設定值

mat[0,0] = 1.0

mat[0,1] = 2.0

mat[1,0] = 3.0

mat[1,1] = 5.0

// 通過下標指令碼獲取值

print("\(mat[0,0])")

print("\(mat[0,1])")

print("\(mat[1,0])")

print("\(mat[1,1])")

以上程式執行輸出結果為:

1.02.0

3.05.0

matrix 結構體提供了乙個兩個傳入引數的構造方法,兩個引數分別是rows和columns,建立了乙個足夠容納rows * columns個數的double型別陣列。為了儲存,將陣列的大小和陣列每個元素初始值0.0。

你可以通過傳入合適的row和column的數量來構造乙個新的matrix例項。

iOS 開發 Swift 七 函式

func sum a int,b int int let result sum 10,b 20 格式 func 函式名 形參1 型別 預設值,形參2 型別 預設值.返回值 說明 包含預設值的函式可以不用傳遞,並且可以任意組合 格式 func 函式名 形參1 型別,形參2 型別.返回值 說明 可以忽略...

iOS開發Swift篇 (七)函式

一 函式的定義 1 函式的定義格式 1 func 函式名 形參列表 返回值型別 2 形參列表的格式 形參名1 形參型別1,形參名2 形參型別2,3 舉例 計算2個整數的和 1 func sum num1 int,num2 int int 4 沒有返回值的函式 如果函式沒有返回值,有3種寫法 1 fu...

iOS開發 Swift語言使用iconfont

iconfont極大地方便了我們應用的開發,一些小圖示可以做成iconfont,生成乙個iconfont.ttf的字型,使用時專案裡不再需要多種不同解析度的圖示,只需要將android textview或ios uilabel的字型設成iconfont,即可顯示圖示。android設定字型的方法以前...