Ale*_*eod 5 string range ios swift swift3
subscript (r: Range<Int>) -> String {
let start = startIndex.advancedBy(r.startIndex)
let end = start.advancedBy(r.endIndex - r.startIndex)
return self[Range(start: start, end: end)]
}
Run Code Online (Sandbox Code Playgroud)
苦苦挣扎将我的String扩展中的上面的下标转换为swift 3.下面是我在Xcode上按下转换按钮后发生的事情.
subscript (r: Range<Int>) -> String {
let start = characters.index(startIndex, offsetBy: r.lowerBound)
let end = <#T##String.CharacterView corresponding to `start`##String.CharacterView#>.index(start, offsetBy: r.upperBound - r.lowerBound)
return self[(start ..< end)]
}
Run Code Online (Sandbox Code Playgroud)
错误的屏幕截图
characters您需要做的就是在索引前面添加。编译器还会提示您添加String.CharacterView corresponding tostart ##String.CharacterView。该消息可能有点模糊,但它包含很大的价值!告诉你,这需要一个字符数组。characters然而,正如 @vadian 所建议的,您甚至可以从一开始就省略。
我也写了一个小测试,只是为了确定一下。
import Foundation
extension String {
subscript (r: Range<Int>) -> String {
let start = index(startIndex, offsetBy: r.lowerBound)
let end = index(start, offsetBy: r.upperBound - r.lowerBound)
return self[start..<end]
}
}
let string = "Hello world"
let range = Range(uncheckedBounds: (lower: 0, upper: 2))
let s = string[range] // prints "He"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |