我有这个功能:
func getRandomLetter() -> String {
let len = allPossibleLetters.characters.count
let r = arc4random_uniform(UInt32(len))
let index = allPossibleLetters.index (allPossibleLetters.startIndex, offsetBy: r)
return String(allPossibleLetters[index])
}
但是我在尝试编译时遇到以下错误:
Command failed due to signal: Segmentation fault: 11
当我将整数硬编码到offsetBy参数中时,它可以正常工作:
let index = allPossibleLetters.index (allPossibleLetters.startIndex, offsetBy: 11)
// returns a letter as expected
知道是什么原因引起的吗?
答案 0 :(得分:0)
想出来。改变
let r = arc4random_uniform(UInt32(len))
到
let r = Int(arc4random_uniform(UInt32(len)))
现在工作正常。
答案 1 :(得分:0)
似乎传递了错误类型的问题:
let index = allPossibleLetters.index(allPossibleLetters.startIndex, offsetBy: Int(r))
对于那些分段问题,如果单击该错误,将会显示错误详细信息。通常这个日志的最后部分是最有趣的。 在你的情况下它说:
在RangeText =" allPossibleLetters.index(allPossibleLetters.startIndex, offsetBy:r)"