Swift实用小册11: Subscript下标语法的使用

举报
文如秋雨 发表于 2022/08/30 12:53:39 2022/08/30
【摘要】 在本章中,你将学会Subscript下标语法的使用。前言和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。这同时也是对自己学习Swift语言过程的知识整理。如有错误,以你为准。我们新建一个SwiftUI项目,命名为SwiftUISubscript。下标的定义下标,[index],是一种快速访问类、结构体...
在本章中,你将学会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执行赋值操作,获得一个新的值。

我们打印输出结果看看:



以上就是本章的全部内容。
快来动手试试吧!
如果本专栏对你有帮助,不妨点赞、评论、关注~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。