代码:
let x: String = ("abc".substringFromIndex(1))
print(x)
//func tail(s: String) -> String {
// return s.substringFromIndex(1)
//}
//print(tail("abcd"))
这可以按预期工作。
但如果我取消注释最后4行,那么我得到:
Error: cannot convert value of type 'Int' to expected argument type 'Index' (aka 'String.CharacterView.Index')
真的很奇怪。
答案 0 :(得分:4)
这是因为String
中的下标功能不再对整数进行操作,而是对内部Index
类型进行操作:
extension String {
public typealias Index = String.CharacterView.Index
//...
public subscript (i: Index) -> Character { get }
因此您需要获取一些Index
值。你可以通过获取字符串中的第一个索引(也就是第一个字符的索引)来实现这一点,然后从那里导航:
func tail(s: String) -> String {
return s.substringFromIndex(s.startIndex.advancedBy(1))
}
答案 1 :(得分:1)
在Swift 4中:
func tail(s: String) -> String {
return String(s.suffix(from: s.index(s.startIndex, offsetBy: 1)))
}