我正在使用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#>
的协议。这可能与斯威夫特?
MutableObservableArray
是来自Bond框架的类,它是一个反应式编程窗格。
泛型在Swift中不是协变的;这就是错误来自的地方:“MOA”不是“MOA ”的子类型。使类型参数明确(如dfri的答案所示),并且一切都很好。 (方不是:你选了一个不好的标题,它没有告诉我们任何关于你的问题的信息。) –
Raphael
@Raphael对于标题的抱歉,英语不是我的第一语言,我很难描述我正在努力完成的任务。 –