swift - @EnvironmentObject 符合协议:Xcode 未编译
问题描述
我正在使用 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
你知道为什么吗?
编辑:如果你想测试,我放了一个项目骨架
解决方案
推荐阅读
- javascript - 基于 arry 从现有类创建新类实例
- arrays - C初学者,如何简化此代码?
- ios - 在 Swift UI 中停止旋转动画
- android - 无法使用 viewpager 的最后一页上的按钮
- ionic3 - Android Google Playstore Upload Rejection for SMS 权限策略违规问题
- vue.js - 为什么 Vue 的控制 `` 没有处理程序仍然可以在其中输入文本吗?
- c - 无法使用指针获取计数器来计算字符串中的数字、大小写
- python - 为什么我的烧瓶 RESTplus 模型没有注册
- python - 如何在 Windows 中激活我的虚拟环境?
- python - 只用漂亮的汤从谷歌刮取 src 属性