无法将表达式的类型'NSDictionary'转换为'StringLiteralConvertible'类型

时间:2014-10-21 11:27:27

标签: ios string core-data swift nsdictionary

我在使用NSDictionary来获取CoreData模型中的对象时出现问题。

let moc:NSManagedObjectContext = SwiftCoreDataHelper.managedObjectContext()
    let results:NSArray = SwiftCoreDataHelper.fetchEntities(NSStringFromClass(Notificatie), withPredicate: nil, managedObjectContext: moc)

    for notificatie in results
    {
        let singleNotificatie:Notificatie = notificatie as Notificatie

        let notDict:NSDictionary = ["title":notificatie.title, "fireDate":notificatie.fireDate]

    }

Cannot convert the expression's type 'NSDictionary' to type 'StringLiteralConvertible'

问题出现在词典中。

为什么我不能投射String来获取对象?任何解决方案?

1 个答案:

答案 0 :(得分:8)

我认为titlefireDate是可选属性 - 如果是,那就是原因。 NSDictionary无法存储nil值。

你应该:

  • 仅存储非零值(由您决定如何使用可选绑定显式解包)
  • 使用快速字典

如果这是您的Notificatie课程的样子:

class Notificatie {
    var title: String?
    var fireDate: NSDate?
}

使用第一个选项,您应该只向字典添加非零值:

let notDict:NSDictionary = NSDictionary()

if let title = notificatie.title {
    notDict.setValue(title, forKey: "title")
}

if let fireDate = notificatie.fireDate {
    notDict.setValue(fireDate, forKey: "fireDate")
}

如果您选择了swift词典:

let notDict: [String:AnyObject?] = ["title":notificatie.title, "fireDate": notificatie.fireDate]