2015-12-06 6 views
5

私はこの1時間ほど前に困惑しており、髪が足りなくなっています。スウィフトエラー「Uint8」タイプの値をサブスクリプトできません。

私はAdventOfCode.com Day 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])行でエラーが発生しないことに注意してください。

私はこの1つを知りましたが、わかりやすい解決策が見つからないか、見つかった結果を解釈できません。そのほとんどは、このような一見単​​純な問題とは無関係です。

答えて

18

エラーメッセージは誤解を招く可能性があります。問題は、あなたが

theDigest[theCount] as Int 

IntUInt8を変換しない ことですあなたがに代わり

Int(theDigest[theCount]) 

UInt8から新しいIntを作成しています。

いくつかのエラーメッセージの原因を理解できない場合は、複雑な式をいくつかの単純なものに分割すると便利なことがよくあります( )。この場合

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) 

は、第二のラインの建設的なエラーメッセージを表示します。

+1

ホーリー・モリですが、それはあいまいです。そして、式を分けることのヒントをありがとう。私はずっと長い間プログラミングをしていないので、最も基本的なトラブルシューティングのいくつかを忘れてしまった。 – BillEccles

関連する問題