在本章中,你将学会
Subscript
下标语法的使用。
前言
和
Apple
官网或者网上分享的教程类文章不同,我将以实际开发角度讲述
Swift
语言的一些概念和用法,方便大家更好地学习和掌握
Swift
语言。
这同时也是对自己学习
Swift
语言过程的知识整理。
如有错误,以你为准。
我们新建一个
SwiftUI
项目,命名为
SwiftUISubscript
。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcBnYldHL0FWby9mZvwVPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsAjMfd3bkFGazxCMx8VesATMfhHLlN3XnxCMz8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PwJWZ35SM4kzMycDM2EWNxYWNxMGMzYzXzEzNykDM5IzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.webp)
下标的定义
下标,
[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()
}
}
上述代码中,我们在
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)
}
}
}
值得注意的是,如果我们继续添加到
[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)
}
}
}
}
上述代码中,我们使用了
List
列表+
ForEach
循环,在
ForEach
循环函数中,我们通过点语法获得
sampleModels
数组中的
indices
目录,也就是数据索引位置,然后数据的
id
是它本身,这样可以避免相同名称的数据被认为是一条数据而被过滤。
Text
文字部分,我们使用下标的方式,
ForEach
循环通过
[index]
索引遍历访问
sampleModels
数据中的
name
参数的值。
下标的其他使用
下标的其他使用场景就比较常见了,像之前我们提及过的,通过下标的方式定位数据的位置,还有通过下标插入一个新的值到字典中,示例:
var person = ["文如秋雨": 26,"文如秋雨2": 27]
person["文如秋雨3"] = 28
print(person)
上述代码中,我们通过下标的方式将新的键值对插入到了
person
数组中,这是比较常见的用法。
下标的方法类似于实例方法,和定义实例方法的方式一样,定义下标方法我们使用
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
执行赋值操作,获得一个新的值。
我们打印输出结果看看: