Swift 无法调用非函数类型的值';条目';使用CoreData时
假定该函数查找一个条目,或创建一个新条目。 在最后一行,编译器抱怨“无法调用非函数类型“Entry”的值”。 我在网上观看了斯坦福大学的一堂课,老师就是这样做的,但当我在我的项目中尝试时,它不会创建新条目并设置属性,我做错了什么? 谢谢你的帮助Swift 无法调用非函数类型的值';条目';使用CoreData时,swift,core-data,Swift,Core Data,假定该函数查找一个条目,或创建一个新条目。 在最后一行,编译器抱怨“无法调用非函数类型“Entry”的值”。 我在网上观看了斯坦福大学的一堂课,老师就是这样做的,但当我在我的项目中尝试时,它不会创建新条目并设置属性,我做错了什么? 谢谢你的帮助 import UIKit import CoreData class Entry: NSManagedObject{ class func findOrCreatEntry(matching Entry: Entry, in context: NSMa
import UIKit
import CoreData
class Entry: NSManagedObject{
class func findOrCreatEntry(matching Entry: Entry, in context: NSManagedObjectContext) throws -> Entry
{
let request: NSFetchRequest<Entry> = fetchRequest()
request.predicate = NSPredicate(format: "creatTime = &@", Entry.creatTime! as CVarArg)
do {
let matches = try context.fetch(request)
if matches.count > 0 {
assert(matches.count == 1, "Entry.findOrCreatEntry -- database inconsistency")
return matches[0]
}
} catch {
throw error
}
let entry = Entry(context: context)
}
}
导入UIKit
导入CoreData
类条目:NSManagedObject{
类func findOrCreatEntry(匹配条目:条目,在上下文:NSManagedObjectContext中)抛出->条目
{
let请求:NSFetchRequest=fetchRequest()
request.predicate=NSPredicate(格式:“creatTime=&@”,Entry.creatTime!为CVarArg)
做{
let matches=try context.fetch(请求)
如果匹配。计数>0{
断言(matches.count==1,“Entry.findOrCreatEntry——数据库不一致”)
返回匹配项[0]
}
}抓住{
抛出错误
}
let entry=entry(上下文:context)
}
}
您必须返回新创建的条目
实例
您的方法可以写得稍微短一点,并且请将参数标签命名为小写
class func findOrCreatEntry(matching entry: Entry, in context: NSManagedObjectContext) throws -> Entry
{
let request: NSFetchRequest<Entry> = Entry.fetchRequest()
request.predicate = NSPredicate(format: "creatTime = %@", entry.creatTime! as CVarArg)
if let firstMatch = try context.fetch(request).first {
return firstMatch
} else {
return Entry(context: context)
}
}
class func findOrCreatEntry(匹配条目:条目,在上下文:NSManagedObjectContext中)抛出->条目
{
let请求:NSFetchRequest=Entry.fetchRequest()
request.predicate=NSPredicate(格式:“creatTime=%@”,entry.creatTime!作为CVarArg)
如果let firstMatch=try context.fetch(request).first{
返回第一场比赛
}否则{
返回条目(上下文:上下文)
}
}
这种方法的目的是什么?该参数是一个现有的条目
实例!实际上,只有当参数只是创建日期时,该方法才有用
还有另一个输入错误
&@
vs%
最后一行不应该是返回条目(context:context)
?您使用条目(大写E)作为类的名称和函数调用中参数的名称。我认为编译器可能混淆了这两者。通常,类和类型名称应以大写字母开头,而实例应以小写字符开头。@pbasdf是正确的。更改为matching entry:entry
,错误就消失了。多亏了pbasdf和Philip的帮助,解决了这个问题!