【发布时间】:2016-04-20 09:24:03
【问题描述】:
我在这里有一个字符串,我正在尝试对其进行子字符串化。
let desc = "Hello world. Hello World."
var stringRange = 1..<5
desc.substringWithRange(stringRange)
但是 Swift 给了我一个错误。我做错了什么?我正在使用 stringRange 的新符号,因为它不允许我使用旧符号。
【问题讨论】:
我在这里有一个字符串,我正在尝试对其进行子字符串化。
let desc = "Hello world. Hello World."
var stringRange = 1..<5
desc.substringWithRange(stringRange)
但是 Swift 给了我一个错误。我做错了什么?我正在使用 stringRange 的新符号,因为它不允许我使用旧符号。
【问题讨论】:
您创建的Range 类型不正确,推断为Int。您需要从字符串本身创建范围:
let desc = "Hello world. Hello World."
let stringRange = desc.startIndex..<desc.startIndex.advancedBy(5)
let sub = desc[stringRange]
String 稍微复杂一些。或者,返回NSString 和NSRange:
let range = NSMakeRange(0, 5)
let sub2 = (desc as NSString).substringWithRange(range)
【讨论】:
您的1..<5 来自Range<Int> 类型,而substringWithRange 方法需要来自Range<Index> 类型的值
let desc = "Hello world. Hello World."
var dd = desc.substringWithRange(desc.startIndex..<desc.startIndex.advancedBy(5))
您也可以将advanceBy 申请到desc.startIndex
【讨论】: