Mar*_*sel 0 string indexing swift swift3
在Swift 3中,SE-0065更改了Collections 的索引模型,其中索引遍历的责任从索引移动到集合本身.例如,不是写作i.successor(),而是写作c.index(after: i).
这对于String在某个索引处访问s 意味着什么,而不是写这个:
let aStringName = "Bar Baz"
aStringName[aStringName.startIndex.advancedBy(3)]
Run Code Online (Sandbox Code Playgroud)
......我们现在要写这个:
aStringName[aStringName.index(aStringName.startIndex, offsetBy: 3)]
Run Code Online (Sandbox Code Playgroud)
这看起来非常多余,正如aStringName所提到的那样.所以我的问题是,如果有办法绕过这个(除了写一个扩展String)?
对于未来的Google员工,我在String下面发布我的扩展程序.它允许您使用Ints而不是繁琐的方式访问字符串Index:
extension String {
subscript(index: Int) -> Character {
let startIndex = self.index(self.startIndex, offsetBy: index)
return self[startIndex]
}
subscript(range: CountableRange<Int>) -> String {
let startIndex = self.index(self.startIndex, offsetBy: range.lowerBound)
let endIndex = self.index(startIndex, offsetBy: range.count)
return self[startIndex..<endIndex]
}
subscript(range: CountableClosedRange<Int>) -> String {
let startIndex = self.index(self.startIndex, offsetBy: range.lowerBound)
let endIndex = self.index(startIndex, offsetBy: range.count)
return self[startIndex...endIndex]
}
subscript(range: NSRange) -> String {
let startIndex = self.index(self.startIndex, offsetBy: range.location)
let endIndex = self.index(startIndex, offsetBy: range.length)
return self[startIndex..<endIndex]
}
}
let str = "Hello world"
print(str[0]) // Get the first character
print(str[0..<5]) // Get characters 0 - 4, with a CountableRange
print(str[0...4]) // Get chacraters 0 - 4, with a ClosedCountableRange
print(str[NSMakeRange(0, 5)]) // For interacting with Foundation classes, such as NSRegularExpression
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |