2

所以我试图解析一个字符串并用每个转换为字符串的字符填充一个数组,并且我还删除了空格。

这是代码的一部分:

class KeyboardView: UIView {
    var answer: AnyObject?
    var keyboardLetters = [String]()

    override func willMoveToSuperview(newSuperview: UIView?) {
        for letter in answer! as String {
            if letter != " " {
                keyboardLetters.append(String(letter).lowercaseString)
            }
        }
    }
}

当我删除for循环时,错误消失了,它只发生在iPhone 4s和iPhone 5上,5s及以上都可以。

有关如何解决此问题或获取有关错误的更多信息的任何想法?

谢谢。

编辑

哦,我在 Xcode 6.1、Xcode 6.1.1 和 Xcode 6.2 beta 中对此进行了测试。到处都是一样的东西。

编辑2

这是代码的较大部分,我只是注意到如果我删除以 userAnswer 开头的行之后的所有内容,错误就会消失。

for letter in answer! as String {
    if letter != " " {
        keyboardLetters.append(String(letter).lowercaseString)
    }
}

userAnswer = [Int](count: keyboardLetters.count, repeatedValue: -1)

while keyboardLetters.count < 21 {
    let randomNumber = Int(arc4random()) % 25
    let randomLetter = String(alphabet[randomNumber])
    keyboardLetters.append(randomLetter)
}

keyboardLetters = shuffle(keyboardLetters)

请原谅我的 Swift,这是我的第一个应用程序。

4

1 回答 1

1

您的问题几乎可以肯定是arc4random()电话。它返回一个无符号的 32 位整数。在 32 位平台上,SwiftInt是 32 位签名的,所以大约一半的时间,你randomNumber最终会是负面的。负数不构成良好的数组索引。

无论如何,您都应该使用arc4random_uniform(),因为这样可以避免您自己取模而产生的偏差。作为奖励,这也应该解决负数问题:

let randomNumber = Int(arc4random_uniform(25))
于 2014-11-26T23:27:09.923 回答