无法转换类型&#39; Range <int>&#39;的值预期参数类型&#39;范围<索引>&#39; (又名&#39;范围<string.characterview.index>&#39;)

时间:2016-04-20 09:24:04

标签: string swift substring

我在这里有一个字符串,我正在尝试子字符串。

let desc = "Hello world. Hello World."
var stringRange = 1..<5
desc.substringWithRange(stringRange)

然而Swift给我一个错误。我做错了什么?我正在使用stringRange的新表示法,因为它不允许我使用旧的表示法。

2 个答案:

答案 0 :(得分:7)

您创建的Range没有正确的类型,推断为Int。您需要从字符串本身创建范围:

let desc = "Hello world. Hello World."
let stringRange = desc.startIndex..<desc.startIndex.advancedBy(5)
let sub = desc[stringRange]

String稍微复杂一些。或者,返回NSStringNSRange

let range = NSMakeRange(0, 5)
let sub2 = (desc as NSString).substringWithRange(range)

答案 1 :(得分:3)

您的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