Swift3.0 - 下标

Swift3.0 - 真的很简单
Swift3.0 - 数据类型
Swift3.0 - Array
Swift3.0 - 字典
Swift3.0 - 可选值
Swift3.0 - 集合
Swift3.0 - 流控制
Swift3.0 - 对象和类
Swift3.0 - 属性
Swift3.0 - 函数和闭包
Swift3.0 - 初始化和释放
Swift3.0 - 协议protocol
Swift3.0 - 类和结构体的区别
Swift3.0 - 枚举
Swift3.0 - 扩展
Swift3.0 - 下标
Swift3.0 - 泛型
Swift3.0 - 异常错误
Swift3.0 - 断言
Swift3.0 - 自动引用计数(strong,weak,unowned)
Swift3.0 - 检测API
Swift3.0 - 对象的标识
Swift3.0 - 注释
Swift3.0 - 元类型
Swift3.0 - 空间命名
Swift3.0 - 对象判等
Swift3.0 - 探究Self的用途
Swift3.0 - 类簇
Swift3.0 - 动态调用对象(实例)方法
Swift3.0 - 文本输出
Swift3.0 - 黑魔法swizzle
Swift3.0 - 镜像
Swift3.0 - 遇到的坑

  • 定义
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.下标也是可以在枚举中使用的

推荐阅读更多精彩内容