一尘不染

类型“ String.Index”不符合协议“ IntegerLiteralConvertible”

swift

Beta 3一切正常,现在出现一个奇怪的错误,而且我不知道如何解决它。尝试了所有类似问题的解决方案。

这是我的代码:

if !name.isEmpty {
        var splitted: [String] = name.componentsSeparatedByString(" ")

        for curPart in splitted {
            if !curPart.isEmpty {
                acronym += curPart.substringToIndex(1) //Error
            }
        }
        if (acronym as NSString).length > 2 {
            acronym = acronym.substringToIndex(2) //Error
        }
    }

两条标记线都给了我相同的错误:

类型“ String.Index”不符合协议“ IntegerLiteralConvertible”

有人能帮我吗?还是Beta 4有漏洞?谢谢!


阅读 246

收藏
2020-07-07

共1个答案

一尘不染

在Beta 4中,Swift的String.Index处理再次发生了变化-
现在,IntString.Index期望a时,您将无法提供。处理该问题的方法是String.Index使用advance方法创建所需的代码:

if !name.isEmpty {
    var splitted: [String] = name.componentsSeparatedByString(" ")

    for curPart in splitted {
        if !curPart.isEmpty {
            acronym += curPart.substringToIndex(advance(curPart.startIndex, 1))
        }
    }
    if countElements(acronym) > 2 {
        acronym = acronym.substringToIndex(advance(acronym.startIndex, 2))
    }
}

所有这些都是基于确保正确处理Unicode字符串-由于不同的Unicode字符可以具有不同的大小,因此,纯整数索引将掩盖字符串不是随机访问的事实。

2020-07-07