Swift2 无法将NSMutableDictionnary强制转换为[String:AnyObject]

Swift2 无法将NSMutableDictionnary强制转换为[String:AnyObject],swift2,Swift2,我将转到Swift 2.1,这是一段管理持久性CoreData的代码。尽管我遇到一个奇怪的错误,告诉我不能将NSMutableDictionnary转换为[String:AnyObject],这是我不理解的 do { try coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: options) } catch var provid

我将转到Swift 2.1,这是一段管理持久性CoreData的代码。尽管我遇到一个奇怪的错误,告诉我不能将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()
}
警告信息:

从“NSMutableDictionary”转换为不相关类型“[String:AnyObject]”总是失败


我将通过直接使用Swift词汇表来解决这个问题,但我想知道为什么会出现这样的问题。

只需在核心数据模板中使用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],由于该类型是非可选的,因此无需强制转换它


原因是可变集合类型NSMutableArray和NSMutableDictionary不会自动桥接到Swift对应项。

如果你读过这个问题,你会注意到这句话:我将直接使用Swift字典解决这个问题,但我想知道为什么会出现这样的问题。@AsTeR我不认为你对人如此敏锐会得到很多帮助。我已经添加了原因。@Trojafoe这是真的,这并不反对瓦迪安人。更令人厌倦的是,人们为了回答而回答,通常也遵循不加评论的向下投票模式,或者没有更多理由的要求结束。@瓦迪安人感谢原因,如果你偶然发现需要做这样的演员,你有什么建议吗?