Невозможно определить тип возврата сложного замыкания; добавить явный тип для устранения неоднозначности - PullRequest
0 голосов
/ 02 мая 2018

Кто-нибудь знает, как я могу решить эту ошибку, которую я получаю? Ошибка получена в первой строке следующего фрагмента кода:

let fetchedResultsController: NSFetchedResultsController = {
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Message")
    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
}()

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Сообщение об ошибке немного вводит в заблуждение, проблема в том, что вы сделали не указывать универсальный тип заполнителя для переменной.

Вы можете добавить явный тип возврата к закрытию, как @Mukesh Предполагается, что в этом случае тип аннотации для переменной не необходимо:

let fetchedResultsController = { () -> NSFetchedResultsController<NSFetchRequestResult> in
    // ...
    return frc
}()

Или полностью указать тип переменной, затем возвращаемое значение тип выводится автоматически:

let fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> = {
    // ...
    return frc
}()
0 голосов
/ 02 мая 2018

Два номера:

  1. Как уже упоминалось в других ответах, вы должны указать универсальный тип, в вашем случае идеальным типом является конкретный NSManagedObject подкласс.
  2. Для объявления NSFetchedResultsController требуется как минимум один дескриптор сортировки .

    let fetchedResultsController: NSFetchedResultsController<Message> = {
        let fetchRequest = NSFetchRequest<Message>(entityName: "Message")
        fetchRequest.sortDescriptors = [NSSortDescriptor(key: "somekey", ascending: true]
        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
    }()
    
0 голосов
/ 02 мая 2018

Попробуйте добавить тип возврата в замыкании, как этот код:

let fetchedResultsController: NSFetchedResultsController = { () -> NSFetchedResultsController<NSFetchRequestResult> in
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Message")
    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
}()
...