【发布时间】:2021-05-09 23:08:36
【问题描述】:
我有以下代码设置(用 Swift 编写):
protocol DataFetcherType {
init(_ mainData: String, fetchData: Bool)
}
class DataFetcher1: DataFetcherType {
required init(_ mainData: String, fetchData: Bool) {
}
}
class DataFetcher2: DataFetcherType {
required init(_ mainData: String, fetchData: Bool) {
}
}
struct Data<FetcherType: DataFetcherType> {
var mainData: String
var fetcher: DataFetcherType
init(_ mainData: String, using fetcher: FetcherType, fetchData: Bool = true) {
self.mainData = mainData
self.fetcher = FetcherType(mainData, fetchData: fetchData)
}
}
我正在尝试像这样实例化Data:
Data("foo", using: DataFetcher1)
但我得到了错误:
类型“DataFetcher1.Type”不能符合“DataFetcherType”
如果我尝试使用DataFetcher2,也是如此。
我已经做了好几个小时了,我觉得我已经改变了所有可能的事情,但我就是无法让它发挥作用。我最初的尝试没有使用泛型,但我最终决定这可能是我需要做的。这是错的,还是我从根本上错过了 Swift 工作原理的一些东西?
【问题讨论】:
-
在您的数据结构初始化程序中执行 self.fetcher = fetcher,这正是您想要实现的目标?
-
@Kazi 不,因为我仍然需要使用
mainData和其他参数初始化 fetcher。目标是实例化Data并让它自动/异步获取相关数据
标签: swift generics instantiation swift-protocols