我还没有弄清楚如何String在Swift中获取a的子串:
var str = “Hello, playground”
func test(str: String) -> String {
return str.substringWithRange( /* What goes here? */ )
}
test (str)
Run Code Online (Sandbox Code Playgroud)
我无法在Swift中创建一个Range.游乐场中的自动填充功能并不是非常有用 - 这就是它的建议:
return str.substringWithRange(aRange: Range<String.Index>)
Run Code Online (Sandbox Code Playgroud)
我没有在Swift标准参考库中找到任何有帮助的内容.这是另一个疯狂的猜测:
return str.substringWithRange(Range(0, 1))
Run Code Online (Sandbox Code Playgroud)
还有这个:
let r:Range<String.Index> = Range<String.Index>(start: 0, end: 2)
return str.substringWithRange(r)
Run Code Online (Sandbox Code Playgroud)
我已经看到其他答案(查找Swift字符串中的字符索引)似乎表明,因为它String是一种桥接类型NSString,"旧"方法应该有效,但是不清楚如何 - 例如,这也不起作用(似乎不是有效的语法):
let x = str.substringWithRange(NSMakeRange(0, 3))
Run Code Online (Sandbox Code Playgroud)
思考?
我在这一行遇到编译器错误:
UIDevice.currentDevice().identifierForVendor.UUIDString.substringToIndex(8)
Run Code Online (Sandbox Code Playgroud)
类型'String.Index'不符合协议'IntegerLiteralConvertible'
我的意图是得到子串,但是如何?
我不确定它是否是XCode中的错误,或者我不理解Swift中的范围.以下是一些显示范围如何工作的代码:
let range = 0..<5
contains(range, 0) // true
contains(range, 5) // false
range.startIndex == 0 // true
range.endIndex == 5 // true
let str = "Hello, playground"
str.rangeOfString("Hello")! // 0..<5
Run Code Online (Sandbox Code Playgroud)
大!现在让我们使用真正的代码:
let str = "Hello, playground"
if let range = str.rangeOfString("Hello") {
if range.startIndex == 0 {
print("str starts with 'Hello'")
}
}
Run Code Online (Sandbox Code Playgroud)
我正在读取跟踪错误 if range.startIndex == 0 {
无法使用类型为(String.index,IntegerLiteralConvertible)的参数lis调用'=='