2015-12-06 17 views
5

Son bir saat boyunca bunun üzerinde kafa karıştırıyorum ve saçtan bitiyor.Hızlı hata "[Uint8] türünde bir alt değer belirtilemiyor"

AdventOfCode.com Day 4 ile eğleniyorum (10/10, tekrar oynayacak) ve bu küçük işlevin işe yaramasını istiyorum. (Lütfen ne kadar güzel bir şekilde kodumun güzel olduğuna dair yorum yapmayın. Bu, hızlı ve kirli olması gerekiyordu, ama şimdi sadece kirli. Heck, kodun çalışma şansı olup olmadığını bile bilmiyorum. ...)

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

print(theDigest[0]) 

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

return theCount 
} 

hata theDigest[theCount] gerçekleşir ve " '[Uint8]' türünde bir değer indis olamaz" dir. Swift'e aşina olmamasına rağmen, bana söylediği şeyin UInt8'ler dizisinde bir dizini (herhangi bir şekilde) kullanamayacağından eminim. Ancak, print(theDigest[0]) satırının hata oluşturmayacağını unutmayın.

Ben bunun dışında heck Googled ettik, ya da açık çözüm eksik ya da bulduğum sonuçları yorumlayamıyorum, çoğu bu tür basit bir sorun ile alakasız görünüyor.

cevap

18

Hata iletisi yanıltıcı. Sorun

theDigest[theCount] as Int 

ile Int için bir UInt8 dönüştürmez olmasıdır Sen yerine

Int(theDigest[theCount]) 

ile UInt8 den yeni Int oluşturmak var.

Bazı hata iletilerinin nedenini anlamıyorsanız, karmaşık bir ifadeyi birkaç basit kısma ayırmak genellikle yardımcı olur. Bu durumda

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) 

yılında ikinci hat için yapıcı bir hata mesajı verir.

+1

Kutsal moly, ama bu belirsizdir. Ve dışavurumu ayıran ipucu için teşekkürler. Programlamadan çok uzaktayım ve en temel sorun giderme işlemlerini unuttum. – BillEccles

İlgili konular