作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
大约过去一个小时我一直在为这个问题困惑,我的头发都快没了。
我在 AdventOfCode.com 第 4 天玩得很开心(10 月 10 日,会再次玩)并希望这个小功能起作用。 (请不要评论我的代码不是多么漂亮。这意味着快速和肮脏,但现在只是肮脏。哎呀,我什至不知道代码是否有机会工作。任何人...)
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,但我很确定它告诉我的是我不能在 UInt8 数组上使用(任何类型的)索引。但是请注意,print(theDigest[0])
行不会导致错误。
我用 Google 搜索了这个问题,但要么我错过了明显的解决方案,要么无法解释我找到的结果,其中大部分似乎与这样一个看似简单的问题无关。
最佳答案
错误信息具有误导性。问题是你不能将 UInt8
转换为 Int
theDigest[theCount] as Int
你必须从 UInt8
中创建一个新的 Int
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)
为第二行给出建设性的错误信息。
关于arrays - swift 错误 "Cannot subscript a value of type [Uint8]",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34123350/
我是一名优秀的程序员,十分优秀!