2015-11-26 100 views
0

我正在轉向Swift 2.1管理持久性CoreData的一些代碼。雖然我得到一個奇怪的錯誤,告訴我,我不能投NSMutableDictionnary[String: AnyObject]這是我不明白無法將NSMutableDictionnary強制轉換爲[String:AnyObject]

do { 
    try coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, 
     configuration: nil, URL: url, options: options) 
} catch var providedError as NSError { 
    coordinator = nil 
    // Report any error we got. 
    let dict = NSMutableDictionary() 
    dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" 
    dict[NSLocalizedFailureReasonErrorKey] = failureReason 
    dict[NSUnderlyingErrorKey] = providedError 

    let error = NSError(domain: "SOME_ERROR_DOMAIN", code: 9999, 
     userInfo: dict as! [String : AnyObject]) // <--- HERE IS THE WARNING 
} catch { 
    fatalError() 
} 

警告消息:

Cast from 'NSMutableDictionary' to unrelated type '[String : AnyObject]' always fails

我會解決這個直接使用Swift Dictionnary,但我想知道這個問題的原因。

回答

0

只需在Core Data模板中使用Apple建議的代碼即可。

let dict = [String: AnyObject]() 
dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" 
dict[NSLocalizedFailureReasonErrorKey] = failureReason 
dict[NSUnderlyingErrorKey] = providedError 

let error = NSError(domain: "SOME_ERROR_DOMAIN", code: 9999, userInfo: dict) 

類型是[String: AnyObject]並且由於類型爲非可選的,沒有必要投它。

原因是可變集合類型NSMutableArrayNSMutableDictionary沒有自動橋接到Swift對應項。

+0

如果你讀過這個問題,你會注意到這句話:「我將通過直接使用Swift Dictionnary來解決這個問題,但我想知道爲什麼會出現這樣的問題。」 – AsTeR

+0

@AsTeR我認爲你不會對人們如此尖銳的幫助很大。 – trojanfoe

+0

我已經添加了原因。 – vadian

相關問題