Swift错误“无法下标类型[Uint8]的值”

时间:2015-12-06 22:00:15

标签: arrays swift

在过去的一个小时里,我一直在为这个问题感到困惑,而且我的头发已经不多了。

我正在玩AdventOfCode.com第4天(10/10,将再次播放),并希望这个小功能工作。 (请不要评论我的代码是多么美丽。这本来就是快速而又脏的,但它现在只是肮脏的。哎呀,我甚至不知道代码是否有机会工作.Allwho ...)

func countDigestLeadingZeros( theDigest:[UInt8] ) -> Int {
var theCount: Int = 0

print(theDigest[0])

while ((theCount < 16) && (countLeadingZeroNybbles( theDigest[theCount] as Int)>0)) {
        theCount++
}

return theCount
}

错误发生在theDigest[theCount],并且“无法下标类型的值'[UInt8]'”。虽然不熟悉Swift,但我很确定它告诉我的是我不能在UInt8s数组上使用索引(任何类型)。但请注意,print(theDigest[0])行不会导致错误。

我已经用Google搜索了这个,但要么我错过了明显的解决方案,要么无法解释我发现的结果,其中大部分看起来与这个看似简单的问题无关。

1 个答案:

答案 0 :(得分:19)

错误消息具有误导性。问题是你做不到 使用

UInt8转换为InttheDigest[theCount] as Int
Int

您必须<{1}}与

一起创建新的UInt8
Int(theDigest[theCount])

代替。

如果您不了解某些错误消息的原因,则通常是这样 有助于将复杂表达式拆分为几个简单表达式。 在这种情况下

let tmp1 = theDigest[theCount]
let tmp2 = tmp1 as Int // error: cannot convert value of type 'UInt8' to type 'Int' in coercion
let tmp3 = countLeadingZeroNybbles(tmp2)

为第二行提供了建设性的错误消息。