subscript(index: Int) -> Int {
get {
}
set(newValue) {
}
}
a.需求: 获取字符串第2个字符
一般写法:
func getCharacterByIndex(n:Int,string:String)-> Character?{
let index = string.characters.index(string.characters.startIndex, offsetBy:n)
return string.characters[index]
}
let c = getCharacterByIndex(n: 2, string: "你好吗")
我们扩展下表写法
let string = "你好,我是酷走天涯"
extension String{
subscript(n:Int)->Character{
let index = string.characters.index(string.characters.startIndex, offsetBy:n)
return string.characters[index]
}
}
let c = string[1] // 是不是简便很多
b.需求: .截取范围内的字符串
extension String{
subscript(begin:Int,end:Int) -> String{
let range = self.index(startIndex, offsetBy: begin)...self.index(startIndex, offsetBy: end)
return self[range]
}
}
// 调用
let subString = string[2,4]
更优雅的写法
extension String{
subscript(range:ClosedRange<Int>)->String{
let range = self.index(startIndex, offsetBy: range.lowerBound )...self.index(startIndex, offsetBy: range.upperBound)
return self[range]
}
}
let subString = string[1...5]
1.下标的参数不能是inout 修饰的类型 2.类或者结构体可以提供任意多个下标实现 3.下标也是可以在枚举中使用的