2017-04-26 56 views
1
let json = [ 
    "left" : 18, 
    "deadline" : "May 10", 
    "progress" : 0.6 
] as [String: AnyObject] 

let ss = json["progress"] as? Float 
let sss = json["progress"] as? Double 
print("ss = \(ss)\n sss = \(sss)") 

我不知道爲什麼ss顯示爲零,而sss顯示0.599999998。爲什麼鑄造到Float得到零?你們有一些方法,以便我可以得到正確的結果嗎?斯威夫特:AnyObject投漂浮失敗

+0

你應該使用any而不是AnyObject let json:[String:Any] = [「left」:18,「deadline」:「May 10」,「progress」:0.6]' –

+0

如果你想存儲一個Float你需要將它指定爲'Float(0.6)',否則編譯器會推斷出類型(Double) –

+0

我試圖使用Any,但是它產生了沒有意義。 – Elena

回答

1

0.6Double文字值。因此,你不能將它投到Float(你需要轉換成吧)。

試試這個:

let f = Float(json["progress"] as! Double) 

或者,如果你真的不知道該AnyObject成立,更安全的方法是什麼類型的號碼:

let f = (json["progress"] as! NSNumber).floatValue 

當然,那些as!以上將崩潰如果json值丟失您誤判預期的類型。使用as?操盤手,如果你覺得另有:)


鑄造速成班。當鑄造已知Double值到Float,編譯器爲我們提供了一個很好的頭了這一點:

let d = 0.6 
let f = d as? Float 

警告:投從「雙師型」到不相關類型的「浮動」總是失敗

+0

@LeoDabus好葉在這裏仍然在斯威夫特周圍學習他的方式......快速失敗幫助很多!沉默的錯誤不是那麼多... –

+0

@LeoDabus要清楚,如果我們將它作爲'Float?',他將一直使用'?',並且在他的代碼最終崩潰時完全丟失。只要看看所有這些新手問題,在那裏錯誤地使用'?'就像瘋狂哈哈... –

+0

@LeoDabus我覺得他仍然在*測試*階段你的...... :-)無論如何,謝謝你的詳細反饋人! –