天天看点

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下标语法的使用