我正在使用Swift 3,我想完成一些我不确定的事情。我的后端有不同的内容类型的几个不同的端点,以不同的方式页面响应等。我正在尝试创建一个可以为每种内容类型实现的通用协议。
protocol DynamicContentFetcher {
func content() -> MutableObservableArray<Any>
func getNext()
func refresh()
}
其中一个例子是AdSearch。
class AdSearch: DynamicContentFetcher {
var results = MutableObservableArray<DynamicAd>([])
func content() -> MutableObservableArray<Any> {
return results
}
return
无法使用错误Cannot convert return expression of type MutableObservableArray<DynamicAd> to return type 'MutableObservableArray<Any>
进行编译,这是有道理的。
如果我可以创建符合DynamicContentFetcher
AdSearch<DynamicAd>
类的func content() -> MutableObservableArray<#Specified Type#>
并且在&lt;&gt;中使用该值,那将是多么好的。在协议中做MutableObservableArray
。 Swift可以实现吗?
LanguageModel
是Bond框架中的一个类,一个反应式编程窗口。
答案 0 :(得分:5)
您可以在协议中使用associatedtype
,并将其用作协议中content()
的返回类型中的typeholder:
struct MutableObservableArray<T> {}
protocol DynamicContentFetcher {
associatedtype T
func content() -> MutableObservableArray<T>
//func getNext()
//func refresh()
}
struct DynamicAd {}
class AdSearch: DynamicContentFetcher {
var results = MutableObservableArray<DynamicAd>()
func content() -> MutableObservableArray<DynamicAd> {
return results
}
}
如果我可以开始符合我的课程,那将是多么好的
DynamicContentFetcher
与AdSearch<DynamicAd>
类似,并使用该值 在<>
进行func content() -> MutableObservableArray<#Specified Type#>
协议。
您可能希望AdSeach
类是通用的,持有一个泛型类型,用于指定(下面,隐式推断)typealias
associatedtype
的{{1}} {1}}协议。
DynamicContentFetcher