【问题标题】:Value of type '(Class) -> () -> (Class)' has no member 'variable'“(类)->()->(类)”类型的值没有成员“变量”
【发布时间】:2018-05-02 12:09:55
【问题描述】:
let fetchedResultsController: NSFetchedResultsController = { () -> NSFetchedResultsController<NSFetchRequestResult> in
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Message")
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]
    fetchRequest.predicate = NSPredicate(format: "friend.name = %@", self.friend!.name!)
    let delegate = UIApplication.shared.delegate as! AppDelegate
    let context = delegate.persistentContainer.viewContext
    let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
    return frc
}()

在上面写着:fetchRequest.predicate = NSPredicate(format: "friend.name = %@", self.friend!.name!) 我得到错误:Value of type '(ChatLogController) -&gt; () -&gt; (ChatLogController)' has no member 'friend' 所以显然它在我的班级ChatLogController 中找不到friend 出于某种原因,还是我错了?这就是我的猜测,因为它找不到friend 作为self 的成员。

这是friend 变量,它在ChatLogController 类中:

var friend: Friend?
{
    didSet
    {
        navigationItem.title = friend?.name

        messages = friend?.messages?.allObjects as? [Message]

        messages = messages?.sorted(by: {$0.date!.compare($1.date! as Date) == .orderedAscending})
    }
}

有谁知道我为什么会收到这个错误以及如何解决它?

编辑:我注意到,如果我从第一个代码 sn-p 的第一行中删除 () -&gt; NSFetchedResultsController&lt;NSFetchRequestResult&gt; in,错误就会消失,但是我会收到此错误:Unable to infer complex closure return type; add explicit type to disambiguate

【问题讨论】:

  • 您需要在声明它们的上下文中显示这两个代码的 sn-ps。例如,在第一个sn-p中,编译器不认为selfChatLogController,它认为它是某个描述的闭包。
  • @JeremyP 你想看代码的哪一部分?我该怎么做才能让self 指向班级?我分享的两个代码sn-ps都在ChatLogController内。

标签: ios swift xcode compiler-errors nsfetchedresultscontroller


【解决方案1】:

您已将friend 声明为optional 属性,该属性在fetchedResultsController 的initialisation 时尚未初始化,该属性是一个常量,因此它给出了错误。要解决这个问题,你可以使用lazy initialisation 这意味着

延迟创建对象或其他一些昂贵的过程 直到需要为止

使 fetchedResultsController 属性变得惰性,这会延迟对象的创建直到需要它

lazy var fetchedResultsController: NSFetchedResultsController = { [unowned self] () -> NSFetchedResultsController<NSFetchRequestResult> in
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Message")
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]
    fetchRequest.predicate = NSPredicate(format: "friend.name = %@", self.friend!.name!)
    let delegate = UIApplication.shared.delegate as! AppDelegate
    let context = delegate.persistentContainer.viewContext
    let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
    return frc
}()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2023-04-07
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多