WWDC2019 Session 204 - использование основных данных для источника данных с идентифицируемым протоколом - PullRequest
2 голосов
/ 20 июня 2019

В сеансе 204 WWDC19 было показано, как создать пользовательский интерфейс, используя Swift 5.1 и функцию List. Я хотел бы использовать Core Data вместо файла данных. Проблема заключается в том, что основной объект данных не соответствует протоколу идентификации.

Я много искал в сети и смотрел несколько видео с основными данными, но все они устарели. Ни одна из них не охватывает Swift 5.1 и новые бета-функции (например, List).

Я создаю сущность с некоторыми полями (name, id -> которая является UUID). Затем я вручную создаю исходные файлы, показанные ниже:

AccountsMO+CoreDataClass.swift:

import Foundation
import CoreData


public class AccountsMO: NSManagedObject
{

}

А AccountsMO+CoreDataProperties.swift:

import Foundation
import CoreData


extension AccountsMO
{

    @nonobjc public class func fetchRequest() -> NSFetchRequest<AccountsMO>
    {
        return NSFetchRequest<AccountsMO>(entityName: "Accounts")
    }

    @NSManaged public var balance: NSDecimalNumber?
    @NSManaged public var id: UUID
    @NSManaged public var name: String
    @NSManaged public var type: Int16

}

Они работают, но я не могу использовать их в Списке, потому что они не соответствуют Протоколу идентификации. Я предполагаю, что есть какой-то способ добавить это, но я не могу найти его ни в основном объекте данных, ни здесь.

Я загружаю свои данные в файл ContentView и пытаюсь использовать их в списке. В зависимости от того, что я пытаюсь, я получаю либо ', неспособный определить тип возврата сложного замыкания; добавить явный тип для устранения неоднозначности ', ИЛИ Я получаю ', не соответствующий идентифицируемому протоколу '.

1 Ответ

0 голосов
/ 30 июня 2019

Из SwiftUI Tutorials

Списки работают с идентифицируемыми данными.Вы можете сделать ваши данные идентифицируемыми одним из двух способов: путем вызова идентифицированного (by :) метода с ключевым путем к свойству, которое уникально идентифицирует каждый элемент, или путем обеспечения соответствия вашего типа данных протоколу Identifiable.

Поскольку тип AccountsMO уже имеет свойство id, требуемое протоколом Identifiable, просто объявите о соответствии протоколу Identifiable.

import SwiftUI

extension AccountsMO: Identifiable {

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...