我正在使用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#>。 Swift有可能吗?MutableObservableArray是Bond框架(一个响应式编程容器)的类。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您可以在协议中使用associatedtype,并将其用作协议中content()的返回类型的类型持有者: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指定(以下为隐式推断)。class AdSearch<U>: DynamicContentFetcher { // typealias T = U // infered var results = MutableObservableArray<U>() func content() -> MutableObservableArray<U> { return results }}struct DynamicAd {}let dynamicAdSearch = AdSearch<DynamicAd>() (adsbygoogle = window.adsbygoogle || []).push({}); 10-08 01:01