这是我参与更文挑战的第13天,活动详情查看: 更文挑战
下标定义
Swift中的Array
或Dictionary
类型可以通过下标或者键值对的方式来进行数据的访问。实际上在Swift的语法中,下标可以定义在类、结构体和枚举中,可以通过下标的方式来对属性进行访问而不用使用专门的存取方法。对于定义的下标不限于一维,可以定义多维的下标来满足需求。
下标语法
-
下标使用关键字
subscript
修饰,有些类似于方法,参数和返回值作为下标入参和通过下标获取的值。在subscript
的实现部分,类似计算属性,需要实现getter
方法和可选的setter
方法,getter
方法用于通过下标取值,setter
方法用于通过下标设置值。下标语法看起来像计算属性和方法的混合体。subscript(index: Int) -> Int { get { // 返回一个适当的 Int 类型的值 } set(newValue) { // 执行适当的赋值操作 } } 复制代码
-
通过
getter
方法实现只读的下标访问,与只读计算属性类似,可以通过删除getter
关键字及其大括号来简化只读下标的声明class stringsOfText { var strArr = ["A", "B", "C", "D"] subscript(index: Int) -> String { return strArr[index] } } var str = stringsOfText() var string = str.strArr[1]; print(string) log: B 复制代码
-
通过
getter
方法和setter
方法实现的下标读写class Student { var name = "" var age = ""; var hobby = "" subscript(index: Int) -> String { get { switch index { case 0: return(name) case 1: return(age) case 2: return(hobby) default: return "\(index)" } } set(newValue) { switch index { case 0: name = newValue case 1: age = newValue case 2: hobby = newValue default: print(newValue) } } } } var student = Student() student[0] = "li lei" student[1] = "18" student[2] = "play football" print("姓名:\(student.name)") print("年龄:\(student.age)") print("爱好:\(student.hobby)") log: 姓名:li lei 年龄:18 爱好:play football 复制代码
下标选项
Swift中的下标可以自定参数个数和参数类型,返回数据的类型也可以进行自定义。但是有一点需要注意,下标的参数不能设置默认值,也不能设置为in-out
类型
class SectionAndRow {
var array:Array<Array<Int>> = [[1,2],
[3,4],
[5,6],
[7,8]]
subscript(section:Int,row:Int)->Int{
get{
let temp = array[section]
return temp[row]
}
}
}
var data = SectionAndRow()
//通过二维下标取值
var value = data[2,1]
print(value)
log:
6
复制代码
类型下标
- 类型下标:定义在类型本身上调用的下标。
- 类型下标语法:可以把在
static
关键字放置在subscript
之前用来表示类型下标。如果是类可以使用class
关键字代替static
,以允许子类覆盖超类对该下标的实现
class Student {
static var name = ""
static var age = "";
class subscript(index: Int) -> String {
get {
if index == 0 {
return(name)
}else{
return(age)
}
}
set(newValue) {
if index == 0 {
name = newValue
}else{
age = newValue
}
}
}
}
Student[0] = "li lei"
Student[1] = "18"
print("姓名:\(Student.name)")
print("年龄:\(Student.age)")
log:
姓名:li lei
年龄:18
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END