2017-08-29 39 views
0

我試圖將Optional<AnyObject>轉換爲TimeInterval對象來自不同來源。但我現在面臨的以下問題:Swift:casting可選<AnyObject>到TimeInterval錯誤

案例1:從JSON文件

我有一個JSON文件

{ 
... 
"dispatchInterval":50, 
... 
} 

然後,我創建JSONSerialization的字典。

let settingJson = try? String(contentsOfFile:filePath, encoding: String.Encoding.utf8) 

cofigDict:[String:AnyObject] = try JSONSerialization.jsonObject(with: settingJson.data(using: String.Encoding.utf8)!, options:.allowFragments) as! [String:AnyObject] 

所以configDict[ConfigKey.dispatchInterval]類型是 Optional(AnyObject)。它鑄造TimeInterval作品(間隔不,但被設置爲50):

let interval = configDict[ConfigKey.dispatchInterval] as? TimeInterval 

案例2:從字典

這裏我使用的字典設置間隔值。

let configDict = [... "dispatchInterval":50, ...] as [String : AnyObject] 

這裏我們不需要JSONSerialization

同樣這裏的configDict[ConfigKey.dispatchInterval]的類型也是 Optional(AnyObject)

但鑄造它到TimeInterval不起作用(間隔是nil)。

這應該不會發生,因爲我檢查了兩種情況下的configDict[ConfigKey.dispatchInterval]的類型。它只是Optional(AnyObject)

而且是沒有什麼辦法,

let interval = configDict[ConfigKey.dispatchInterval] as? TimeInterval 

作品兩種情況?

+0

我覺得你的代碼看起來像它應該工作。你能否提供一個能夠再現這個問題的麥克風?我可以在操場上跑步,看看你得到的結果。 – Sweeper

回答

0

你可以那樣做:

let interval : TimeInterval? = configDict[ConfigKey.dispatchInterval]?.doubleValue 
+0

你能解釋一下問題所在? – user93726

+0

無法將AnyObject轉換爲Timeinterval其double值不是對象 –

+0

但是這些情況之間有什麼區別?它工作得很好,如果它從JSON文件或JSON字符串中取得的,即使它是AnyObject。 – user93726