Swift:将索引转换为int

Swift:将索引转换为int,swift,type-conversion,Swift,Type Conversion,我不熟悉快速发展。其实这是一个简单的问题,但我无法解决。 我有一个字符串变量“name1”,其中我想确定每个字符在字母表中的位置,并对这些位置求和。因此,我循环遍历字符串,并对每个字符使用indexOf() let name1="myname" let sumPositions=0 for index in 0...name1.characters.count-1{ sumPositions+="ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.indexOf(na

我不熟悉快速发展。其实这是一个简单的问题,但我无法解决。 我有一个字符串变量“name1”,其中我想确定每个字符在字母表中的位置,并对这些位置求和。因此,我循环遍历字符串,并对每个字符使用indexOf()

let name1="myname"
let sumPositions=0

for index in 0...name1.characters.count-1{
sumPositions+="ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters.indexOf(name1.startIndex+index);
}
我发现错误“二进制运算符”+”不能应用于'index'aka'String.characterView.index'和'Int'类型的操作数。
这意味着我必须将“index”转换为“Int”,但我没有找到解决方案。

Leo Dabus在这方面有一个很好的扩展


它不能那样工作。我的建议是,你从字母表中创建一个字母数组,从名称中创建一个字母数组,然后使用
indexOf
查找字母索引,将所有索引附加到一个数组中,然后对数组的内容求和:

let alphabetArray = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".lowercaseString.characters.map { String($0) } // ["a", "b", "c", "d", "e", "f", "g", ...]

let name1 = "myname"
let nameArray = name1.lowercaseString.characters.map { String($0) } // ["m", "y", "n", "a", "m", "e"]

var positions = [Int]()

for nameLetter in nameArray {
    if let index = alphabetArray.indexOf(nameLetter) {
        positions.append(index)
    }
}

print(positions) // [12, 24, 13, 0, 12, 4]

let sum = positions.reduce(0, combine: +) // 65

我们把这篇文章标为副本,而不是复制另一篇文章的答案,这不是更好吗?Q是一个副本,例如,或者用于word->sum of letters的特定用例。是的,但我从来没有研究过如何将一篇文章标为副本。我看你已经做了,所以我想我就不做了?:)啊,我明白了,不用担心!您可以标记(只有一张选票是重复的:我相信在20k代表之前不会有重复投票)通过按
close->duplicate of
来发布可能的副本,并将链接粘贴到您认为要标记的线程的副本。您是对的。我应该接受这个答案还是该怎么办?@dfri您是对的,它是一个副本。我应该将我的答案发布在那里而不是这里。我刚刚关闭了它您提供的其中一个链接有问题。谢谢。可能是的重复。(或:,取决于前一个链接是否是后一个链接的重复)
let alphabetArray = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".lowercaseString.characters.map { String($0) } // ["a", "b", "c", "d", "e", "f", "g", ...]

let name1 = "myname"
let nameArray = name1.lowercaseString.characters.map { String($0) } // ["m", "y", "n", "a", "m", "e"]

var positions = [Int]()

for nameLetter in nameArray {
    if let index = alphabetArray.indexOf(nameLetter) {
        positions.append(index)
    }
}

print(positions) // [12, 24, 13, 0, 12, 4]

let sum = positions.reduce(0, combine: +) // 65