在符合该协议的类的声明中指定协议函数的返回类型

时间:2017-01-12 09:09:36

标签: ios swift

我正在使用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可以实现吗?

LanguageModelBond框架中的一个类,一个反应式编程窗口。

1 个答案:

答案 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
    }
}
  

如果我可以开始符合我的课程,那将是多么好的   DynamicContentFetcherAdSearch<DynamicAd>类似,并使用该值   在<>进行func content() -> MutableObservableArray<#Specified Type#>   协议。

您可能希望AdSeach类是通用的,持有一个泛型类型,用于指定(下面,隐式推断)typealias associatedtype的{​​{1}} {1}}协议。

DynamicContentFetcher