string – 如何在Swift中将“Index”转换为“Int”类型?

我想将字符串中包含的字母的索引转换为整数值.尝试读取头文件,但我找不到索引的类型,虽然它似乎符合协议ForwardindexType与方法(例如distanceto).
var letters = "abcdefg"
let index = letters.characters.indexOf("c")!

// ERROR: Cannot invoke initializer for type 'Int' with an argument list of type '(String.CharacterView.Index)'
let intValue = Int(index)  // I want the integer value of the index (e.g. 2)

任何帮助表示赞赏.

您需要使用与原始字符串起始索引相关的distanceto(index)方法
let intValue = letters.startIndex.distanceto(index)

您还可以使用方法扩展String以返回字符串中第一次出现的字符,如下所示:

extension String {
    func indexdistanceOfFirst(character character: Character) -> Int? {
        guard let index = characters.indexOf(character) else { return nil }
        return startIndex.distanceto(index)
    }
}

let letters = "abcdefg"
let char: Character = "c"
if let index = letters.indexdistanceOfFirst(character: char) {
    print("character \(char) was found at position #\(index)")   // "character c was found at position #2\n"
} else {
    print("character \(char) was not found")
}

Xcode 8•Swift 3

let letters = "abcdefg"
if let index = letters.characters.index(of: "c") {
    let distance = letters.distance(from: letters.startIndex,to: index)
    print("distance:",distance)
}
extension String {
    func indexdistance(of character: Character) -> Int? {
        guard let index = characters.index(of: character) else { return nil }
        return distance(from: startIndex,to: index)
    }
}
let letters = "abcdefg"
let char: Character = "c"
if let index = letters.indexdistance(of: char) {
    print("character \(char) was found at position #\(index)")   // "character c was found at position #2\n"
} else {
    print("character \(char) was not found")
}

Xcode 9•Swift 4

let letters = "abcdefg"
if let index = letters.index(of: "c") {
    let distance = letters.distance(from: letters.startIndex,distance)
}
extension String {
    func indexdistance(of character: Character) -> Int? {
        guard let index = index(of: character) else { return nil }
        return distance(from: startIndex,to: index)
    }
}

Swift 4中另一种可能的方法是返回index encodedOffset:

extension String {
    func encodedOffset(of character: Character) -> Int? {
        return index(of: character)?.encodedOffset
    }
    func encodedOffset(of string: String) -> Int? {
        return range(of: string)?.lowerBound.encodedOffset
    }
}
let letters = "abcdefg"
let char: Character = "c"
if let index = letters.encodedOffset(of: char) {
    print("character \(char) was found at position #\(index)")   // "character c was found at position #2\n"
} else {
    print("character \(char) was not found")
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...