let array = [1,2,3,4,5]
// 我们可以写成这个样子
let array1: [Int] = [1,3]
let array2:Array<Int> = [1,3]
print(array[1]) // 实例对象 [索引] subscripts
let dict = ["1" :1] // key:value,key hash
let dict1:Dictionary<String,Int> = ["1" :1]
print(dict["1"])
/**
比如我也想构造一个结构体或者类
可以像以上这样通过实例下标的方式访问,
Swift是可以做到的。
按住 command键单击点击进入我们可以看到
public subscript(index: Int) -> Element // array
array.subscript(index)
public subscript(key: Key) -> Value? // dict
dict.subscript(key)
*/
/**
subscripts具体实现
*/
struct Student {
let name:String = ""
var math:Int = 0
var chinese:Int = 0
var english:Int = 0
func scoreOf(course:String) -> Int? {
switch course {
case"math":
returnmath
case"chinese":
returnchinese
case"english":
returnenglish
default:
returnnil
}
}
// 自定义的实现该结构体的下标访问
subscript (course:String) -> Int? {
get {
switch course {
case"math":
returnmath
case"chinese":
returnchinese
case"english":
returnenglish
default:
returnnil
}
}
set {
switch course {
case"math":
returnmath = newValue!
case"chinese":
returnchinese = newValue!
case"english":
returnenglish = newValue!
default:
// return nil
print("key wrong")
}
}
}
}
var xiaoli =Student.init(math:98,chinese: 97,english:100)
print(xiaoli.scoreOf(course:"math"))
// Optional(98)
/**
那么我们如何能够像数组或者字典一样用这种下标的访问方式
xiaoli["math"]
*/
print(xiaoli["math"])
// Optional(98)
xiaoli["math"] =99
print(xiaoli["math"])
/**
subscript (course: String) -> Int?
参数的类型和参数的个数有没有要求,以及返回值类型
它的参数可以是任意的,返回值类型也可以是任意的,
那么参数的个数呢,其实可以做的更复杂一些,比如说下标里面不止一个索引
*/
原文链接:https://www.f2er.com/swift/322398.html