我正在使用Swift 3,我想完成一些我不确定的事情.我的后端有不同的内容类型的几个不同的端点,以不同的方式页面响应等.我正在尝试创建一个可以为每种内容类型实现的通用协议.
protocol DynamicContentFetcher { func content() -> MutableObservableArrayfunc getNext() func refresh() }
其中一个例子是AdSearch.
class AdSearch: DynamicContentFetcher { var results = MutableObservableArray([]) func content() -> MutableObservableArray { return results }
这return
不会编译错误Cannot convert return expression of type MutableObservableArray
,这是有道理的.
什么会很好,如果我可以初始化我的类符合DynamicContentFetcher
喜欢AdSearch
并func content() -> MutableObservableArray<#Specified Type#>
在协议中使用<>中的值.Swift可以实现吗?
MutableObservableArray
是一个来自Bond框架的类,一个反应式编程pod.
您可以associatedtype
在协议中使用a ,并将其用作协议中返回类型中的typeholder content()
:
struct MutableObservableArray{} protocol DynamicContentFetcher { associatedtype T func content() -> MutableObservableArray //func getNext() //func refresh() } struct DynamicAd {} class AdSearch: DynamicContentFetcher { var results = MutableObservableArray () func content() -> MutableObservableArray { return results } }
什么会很好,如果我可以初始化我的类符合
DynamicContentFetcher
喜欢AdSearch
并使用该值在 协议中<>
做func content() -> MutableObservableArray<#Specified Type#>
.
您可能希望让AdSeach
类是通用的,拿着它用于指定(下面,隐含地推断)的通用typeholder的typealias
对associatedtype
中的DynamicContentFetcher
协议.
class AdSearch: DynamicContentFetcher { // typealias T = U // infered var results = MutableObservableArray() func content() -> MutableObservableArray { return results } } struct DynamicAd {} let dynamicAdSearch = AdSearch()