arrays - swift 错误 "Cannot subscript a value of type [Uint8]"

标签 arrays swift

大约过去一个小时我一直在为这个问题困惑,我的头发都快没了。

我在 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/

相关文章:

swift - 添加 Swift 枚举案例是否需要主要的 semver 版本更新?

iOS 13 - 文件管理器 url(用于发布 UbiquitousItemAt :expiration:) not working anymore

javascript - 如何从 "null"和 "undefined"值过滤嵌套数组?

java - LibGDX 中的多个敌人阵列

c - 如何在函数中调用文件指针

java - 为什么我的阵列从我正在阅读的文件中删除零?

c - 如何在C中将数组初始化为0?

ios - Realm :更新属性缓慢

ios - Swift 中对象数组的持久存储

swift - 如何在 Swift 中从字符集中获取随机元素