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
        }
    }

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



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

最佳答案

在Beta 4中,Swift的String.Index处理再次发生了变化-现在,当需要Int时,您将无法提供String.Index。处理它的方法是使用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字符可以具有不同的大小,因此,纯整数索引将隐藏字符串不是随机访问的事实。

10-05 19:17