Swift 无法调用非函数类型的值';条目';使用CoreData时

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

假定该函数查找一个条目,或创建一个新条目。 在最后一行,编译器抱怨“无法调用非函数类型“Entry”的值”。 我在网上观看了斯坦福大学的一堂课,老师就是这样做的,但当我在我的项目中尝试时,它不会创建新条目并设置属性,我做错了什么? 谢谢你的帮助

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的帮助,解决了这个问题!