天天看點

Swift實用小冊11: Subscript下智語法的使用

在本章中,你将學會​

​Subscript​

​下智語法的使用。

前言

和​

​Apple​

​​官網或者網上分享的教程類文章不同,我将以實際開發角度講述​

​Swift​

​​語言的一些概念和用法,友善大家更好地學習和掌握​

​Swift​

​語言。

這同時也是對自己學習​

​Swift​

​語言過程的知識整理。

如有錯誤,以你為準。

我們建立一個​

​SwiftUI​

​​項目,命名為​

​SwiftUISubscript​

​。

Swift實用小冊11: Subscript下智語法的使用

下标的定義

下标,​

​[index]​

​,是一種快速通路類、結構體、枚舉中的元素的方式。

我們可以使用下标的索引,快速通路​

​Model​

​​中的參數值,進而展現在我們的​

​View​

​中。

下标的使用

在​

​Swift​

​​實際開發中,我們常常定義好一個​

​Model​

​結構體,用來存儲我們需要的資料資訊,其中包含屬性、類型、初始值。

我們建立一個​

​Swift​

​​檔案,命名​

​Model​

​。

然後我們會聲明一個資料存儲我們示例的示範資料,示例:

import SwiftUI

struct Model: Identifiable {
    var id = UUID()
    var name: String
}

var sampleModels = [
    Model(name: "這是微信"),
    Model(name: "這是QQ"),
    Model(name: "這是微網誌"),
    Model(name: "這是手機"),
    Model(name: "這是郵箱")
]      

上述代碼中,我們定一個​

​Model​

​​結構體,它遵循​

​Identifiable​

​​,這樣我們就可以通過​

​ID​

​​找到對應的參數。然後我們使用​

​var​

​​聲明了一個​

​sampleModels​

​數組,建立了一些示例的資料作為示範使用。

完成之後,我們嘗試在​

​ContentView​

​結構體中展示這些資料。

struct ContentView: View {
    var body: some View {
        Text(sampleModels[0].name)
            .padding()
    }
}      
Swift實用小冊11: Subscript下智語法的使用

上述代碼中,我們在​

​ContentView​

​​結構體中的​

​Text​

​​文本可通過下标的方式直接通路​

​sampleModels​

​​數組中​

​[0]​

​第一條資料(索引從0開始算),然後通過點文法通路​

​name​

​的值。

我們建立多幾條資料看看效果。

struct ContentView: View {
    var body: some View {
        VStack(alignment: .center, spacing: 20) {
            Text(sampleModels[0].name)
            Text(sampleModels[1].name)
            Text(sampleModels[2].name)
            Text(sampleModels[3].name)
            Text(sampleModels[4].name)
        }
    }
}      
Swift實用小冊11: Subscript下智語法的使用

值得注意的是,如果我們繼續添加到​

​[5]​

​​,​

​Xcode​

​​會報錯,這是因為​

​sampleModels​

​數組中找不到第6個資料。

下标的使用進階

在​

​Swift​

​​實際開發過程中,我們常常使用​

​List​

​​清單+​

​ForEach​

​循環的方式周遊資料中的資料,示例:

struct ContentView: View {
    var body: some View {
        List {
            ForEach(sampleModels.indices,id: \.self) { index in
                Text(sampleModels[index].name)
            }
        }
    }
}      
Swift實用小冊11: Subscript下智語法的使用

上述代碼中,我們使用了​

​List​

​​清單+​

​ForEach​

​​循環,在​

​ForEach​

​​循環函數中,我們通過點文法獲得​

​sampleModels​

​​數組中的​

​indices​

​​目錄,也就是資料索引位置,然後資料的​

​id​

​是它本身,這樣可以避免相同名稱的資料被認為是一條資料而被過濾。

​Text​

​文字部分,我們使用下标的方式,​

​ForEach​

​​循環通過​

​[index]​

​​索引周遊通路​

​sampleModels​

​​資料中的​

​name​

​參數的值。

下标的其他使用

下标的其他使用場景就比較常見了,像之前我們提及過的,通過下标的方式定位資料的位置,還有通過下标插入一個新的值到字典中,示例:

var person = ["文如秋雨": 26,"文如秋雨2": 27]

person["文如秋雨3"] = 28

print(person)      

上述代碼中,我們通過下标的方式将新的鍵值對插入到了​

​person​

​數組中,這是比較常見的用法。

Swift實用小冊11: Subscript下智語法的使用

下标的方法類似于執行個體方法,和定義執行個體方法的方式一樣,定義下标方法我們使用​

​subscript​

​關鍵字,示例:

class category {
    var exampleModels = ["前端", "後端", "安卓", "iOS"]

    subscript(index: Int) -> String {
        get {
            return exampleModels[index]
        }
        set(newValue) {
            exampleModels[index] = newValue
        }
    }
}

var categoryItem = category()

print(categoryItem[0])
print(categoryItem[1])      

上述代碼中,我們定義了一個​

​category​

​​類,然後聲明了一個​

​exampleModels​

​​數組并賦予了一些值,在​

​subscript​

​​下智語法中,我們傳入一個​

​Int​

​​類型的參數,然後傳回一個​

​String​

​​類型的值,我們使用​

​get​

​​方法通路​

​exampleModels​

​​數組中的指定值,然後​

​set​

​執行指派操作,獲得一個新的值。

我們列印輸出結果看看:

Swift實用小冊11: Subscript下智語法的使用