无法将'Int'类型的值转换为预期的参数类型'Index'(又名'String.CharacterView.Index')

时间:2016-01-18 00:12:51

标签: string swift

代码:

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')

真的很奇怪。

2 个答案:

答案 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)))
}