@EnvironmentObject符合协议:Xcode无法编译

时间:2019-06-30 09:50:05

标签: swift swiftui

我正在使用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

您知道为什么吗?

编辑:如果您想测试,我会放一个project skeleton

1 个答案:

答案 0 :(得分:0)

对于beta 3,无休止的编译已得到修复,但是,它会立即返回错误。现在您可以看到真正的问题是

enter image description here

@EnvironmentObject var placesQueryInterface: (FetcherInterface & PlacesQueryInterface)