在本章中,你将学会Subscript
下标语法的使用。
前言
和Apple
官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift
语言的一些概念和用法,方便大家更好地学习和掌握Swift
语言。
这同时也是对自己学习Swift
语言过程的知识整理。
如有错误,以你为准。
我们新建一个SwiftUI
项目,命名为SwiftUISubscript
。
下标的定义
下标,[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
执行赋值操作,获得一个新的值。
我们打印输出结果看看:
以上就是本章的全部内容。
快来动手试试吧!