如何将Int转换为String.CharacterView.Index

如何将Int转换为String.CharacterView.Index,string,swift2,subscript,swift2.2,String,Swift2,Subscript,Swift2.2,这让我快发疯了 在Swift 2.2中,使用Int下标String是不可能的。例如: let myString = "Test string" let index = 0 let firstCharacter = myString[index] 这将导致编译错误,即 “下标”不可用:无法用Int为字符串下标,有关讨论,请参阅文档注释 我看到的一个解决方法是将integer转换为索引类型,但我不知道如何..这并不是说订阅不可能,只是需要额外的一步才能获得与以前相同的结果。下面,我做了与您相同的事

这让我快发疯了

在Swift 2.2中,使用
Int
下标
String
是不可能的。例如:

let myString = "Test string"
let index = 0
let firstCharacter = myString[index]
这将导致编译错误,即

“下标”不可用:无法用Int为字符串下标,有关讨论,请参阅文档注释


我看到的一个解决方法是将integer转换为索引类型,但我不知道如何..

这并不是说订阅不可能,只是需要额外的一步才能获得与以前相同的结果。下面,我做了与您相同的事情,但在Swift 2.2中

let myString = "Test string"
let intForIndex = 0
let index = myString.startIndex.advancedBy(intForIndex)
let firstCharacter = myString[index]
Swift 3.x+4.x

let myString = "Test string"
let intForIndex = 0
let index = myString.index(myString.startIndex, offsetBy: intForIndex)
let firstCharacter = myString[index]
编辑1:

更新了代码,因此您可以使用传递到其他位置的“index”值中的
Int


语法编辑:


我将不断更新此答案,以支持最新版本的Swift。

这也让我很恼火,所以我写了一个扩展来处理它:

extension String {
    subscript (index: Int) -> Character {
        let charIndex = self.startIndex.advancedBy(index)
        return self[charIndex]
    }

    subscript (range: Range<Int>) -> String {
        let startIndex = self.startIndex.advancedBy(range.startIndex)
        let endIndex = startIndex.advancedBy(range.count)

        return self[startIndex..<endIndex]
    }
}

// Usage
let str = "Hello world"

print(str[0])       // H
print(str[0..<5])   // Hello
扩展字符串{
下标(索引:Int)->字符{
设charIndex=self.startIndex.advancedBy(索引)
返回自我[charIndex]
}
下标(范围:范围)->字符串{
让startIndex=self.startIndex.advancedBy(range.startIndex)
让endIndex=startIndex.advancedBy(range.count)
返回self[startIndex..Substring{
设startIndex=self.index(self.startIndex,offsetBy:range.startIndex)
让stopIndex=self.index(self.startIndex,offsetBy:range.startIndex+range.count)

返回自我[startIndex..ZGski答案更新为Swift 3

let myString = "Test string"
let index = 0
let firstCharacter = myString[String.Index(encodedOffset: index)]

swift 4的一个示例:

let a = Array("hello")
for i in a.indices {
   print(a[i])
}

一个简单的技巧是将字符串转换为一个字符数组,您可以使用Int索引该数组:


Swift突然变得很难在2.2中使用…可能的重复在Swift中永远不可能用
Int
为字符串编制索引。这会起到作用,但是用另一种方法转换怎么样?使用.index类型并将其转换为Int。您是想直接将
索引
转换为
Int
,还是想直接转换为
Int
o使用
Int
查找
字符串中的字符
?不可用于其他用途。我需要一个Int,以便可以根据字符在相应索引处操作另一个数组。我结束了将CharacterView映射到字符数组,然后使用它。仍然不理想,因为它会浪费转换时间:(我已经更新了我的答案,以便您可以重复使用传递到“索引”中的
Int
)。
let a = Array("hello")
for i in a.indices {
   print(a[i])
}