模糊地使用' fetch'错误

时间:2016-09-18 15:26:15

标签: swift core-data

我在Xcode 8.0上使用SWIFT 3.0 我试图循环通过模板创建的获取结果。

let request = model.fetchRequestTemplate(forName: "template")

do {
    let result = try context.fetch(request!) // Error on this line
    for item: EntityClassName in result! {
        ...
    }
} catch {
    ...
}

我收到错误"模糊地使用' fetch'"。我的方法有误吗?如果是这样,循环获取结果的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

您使用的方法fetch会返回[Any],因为它可能是[Dictionary][NSManagedObject]或其子类之一。

您必须将[Any]转换为正确的类型

let result = try context.fetch(request!) as! [EntityClassName]
for item in result {
    ...
}

强制解包是绝对安全的,因为根据获取请求,它始终返回[EntityClassName]

Swift 3揭示了很多错误,但在Swift 2中被容忍以改善类型安全性。

或者,您可以将新API与泛型一起使用,这可以避免某些类型转换。

答案 1 :(得分:0)

let fetchRequest: NSFetchRequest<EntityClassName> = model.fetchRequestTemplate(forName: "template")

do {
    let result = try context.fetch(fetchRequest)
    for item in result {
        ...
    }    
} catch {
    ...
}