@EnvironmentObject соответствует протоколу: Xcode не компилируется - PullRequest
4 голосов
/ 30 июня 2019

Я играю с SwiftUI и хотел бы абстрагироваться от @EnvironmentObject. Цель состоит в том, чтобы переключиться с производства BindableObject на поддельное (тестирование / работа локально ...)

Сначала я только что объявил протокол:

protocol FetcherInterface: BindableObject {
    associatedtype T
    var didChange: PassthroughSubject<[T], Never> { get set }
    var values: [T] { get set }
}

Тогда я могу написать сетевой корневой класс, соответствующий FetcherInterface:

open class NetworkFetcher<T: Decodable>: FetcherInterface {

    public var didChange = PassthroughSubject<[T], Never>()
    internal var values: [T] = [T]() {
        didSet {
            DispatchQueue.main.async {
                dump("did set network values \(self.values)")
                self.didChange.send(self.values)
            }
        }
    }

    internal func loadAsync(values: [T]) {
        DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
            self.values = values
        }
    }
}

Теперь я могу иметь дочерний класс, подобный этому:

final class PlacesNetworkFetcher: NetworkFetcher<Place>, PlacesQueryInterface {

    func loadPlacesFromCountryCode(_ countryCode: String) {
        self.loadAsync(values: [Place(id: UUID(), name: "London")])
    }
}

с PlacesQueryInterface:

protocol PlacesQueryInterface {
    func loadPlacesFromCountryCode(_ countryCode: String)
}
extension PlacesQueryInterface where Self: FetcherInterface {}

Когда я хочу использовать все это в моем ContentView.swift Xcode, никогда не заканчивайте компиляцию. Похоже, объект окружающей среды вызывает это:

@EnvironmentObject var placesQueryInterface: PlacesQueryInterface

У вас есть идея, почему?

edit: Я ставлю скелет проекта , если вы хотите проверить

1 Ответ

0 голосов
/ 03 июля 2019

В бета-версии 3 нескончаемая компиляция была исправлена, однако сразу возвращается с ошибкой.Теперь вы можете увидеть, в чем заключается ваша настоящая проблема:

enter image description here

@EnvironmentObject var placesQueryInterface: (FetcherInterface & PlacesQueryInterface)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...