@EnvironmentObject 符合协议:Xcode 未编译
Posted
技术标签:
【中文标题】@EnvironmentObject 符合协议:Xcode 未编译【英文标题】:@EnvironmentObject conforming to protocol: Xcode not compiling 【发布时间】:2019-06-30 09:50:05 【问题描述】:我正在使用 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
【问题讨论】:
在我的机器上,它甚至从未完成索引。显然这使编译器/索引器非常不高兴。请立即向 Apple 提交错误报告。 感谢@matt 我刚刚做到了。 您找到解决方案了吗?我想将它应用到同一个案例(测试/工作) 【参考方案1】:在 beta 3 中,无休止的编译已得到修复,但它会立即返回并出现错误。现在你可以看到你真正的问题是什么了:
@EnvironmentObject var placesQueryInterface: (FetcherInterface & PlacesQueryInterface)
【讨论】:
我现在不知道。但是在 beta2 中不存在 WrappedValue。它是一个新添加的,但它的描述与 value 相同。他们可能是同一件事。 能否再补充一点解释?我不明白这个错误。此外,代码 sn-p 周围没有任何解释。对不对?以上是关于@EnvironmentObject 符合协议:Xcode 未编译的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI View 协议中的 EnvironmentObject
SwiftUI @EnvironmentObject:未找到?