Swift 使用';获取';错误
我在Xcode 8.0上使用SWIFT 3.0 我正在尝试循环通过模板创建的获取结果Swift 使用';获取';错误,swift,core-data,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 {
let request = model.fetchRequestTemplate(forName: "template")
do {
let result = try context.fetch(request!) // Error on this line
for item: EntityClassName in result! {
...
}
} catch {
...
}
我得到错误“不明确地使用'fetch'”。我的方法错了吗?如果是这样,循环获取结果的正确方法是什么?您使用的方法
fetch
返回[Any]
,因为它可能是[Dictionary]
或[NSManagedObject]
或其子类之一
您必须将[Any]
转换为正确的类型
let result = try context.fetch(request!) as! [EntityClassName]
for item in result {
...
}
强制展开是绝对安全的,因为根据提取请求,它总是返回[EntityClassName]
Swift 3揭示了许多在Swift 2中犯过但被容忍的错误,以提高类型安全性
或者,您可以将新的API与泛型一起使用,这样可以避免某些类型转换。让fetchRequest:NSFetchRequest=model.fetchRequestTemplate(forName:“template”)
let fetchRequest: NSFetchRequest<EntityClassName> = model.fetchRequestTemplate(forName: "template")
do {
let result = try context.fetch(fetchRequest)
for item in result {
...
}
} catch {
...
}
做{
let result=try context.fetch(fetchRequest)
对于结果中的项目{
...
}
}抓住{
...
}
我不得不将其更改为{let result=try(context.fetch(request!)!as![EntityClassName]},但您的建议帮助很大。谢谢。实际上不需要额外的括号和感叹号。考虑使用新的通用API。虽然这个代码片段可以解决这个问题,但是确实有助于提高您的文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。