Swift协议继承与动态对象混淆

Swift协议继承与动态对象混淆,swift,swift-protocols,Swift,Swift Protocols,尝试以下是我的设置: protocol CommonFeatureProtocol { } extension CommonFeatureProtocol { } protocol SpecificFeature1Protocol : CommonFeatureProtocol { func specificFeature1Method() } protocol SpecificFeature2Protocol : CommonFeatureProtocol {

尝试以下是我的设置:

protocol CommonFeatureProtocol { }
extension CommonFeatureProtocol { }


 protocol SpecificFeature1Protocol : CommonFeatureProtocol { 
     func specificFeature1Method()
  }


 protocol SpecificFeature2Protocol : CommonFeatureProtocol { 
      func specificFeature2Method()
 }

struct specificFeature1 : SpecificFeature1Protocol { }
struct specificFeature2 : SpecificFeature2Protocol { }
现在在我的另一个类(
UtilFeature
)中,是否可以使用特征对象和特定的特征方法,如-

UtilFeature.feature.specificFeature1Method()
UtilFeature.feature.specificFeature2Method()
类似于(在
UtilFeature
中)-


希望我正确理解了你的问题

是的,考虑下面的简单例子。

protocol P0 {}
protocol P1 : P0 {}
protocol P2 : P0 {}

class C1 : P1 {}

let p : P0 = C1() //Expects p to be of the type P0

您试图实现的功能似乎不可能实现,因为该功能属于
CommonFeatureProtocol
类型,并且不包括该方法。所以用对象(点)方法访问是不可能的

可能:

var feature : SpecificFeature1Protocol {
    return specificFeature1()
}

feature.specificFeature1Method()
或(非首选方式)

明白了你想做的是

您需要由两个协议组成

语法
var组合:[Protocol1和Protocol2]

此外,还可以使用
typealias
使其更具可读性

因此,在你的情况下:

typealias SpecificFeatureProtocol = SpecificFeature1Protocol & SpecificFeature2Protocol

var feature: SpecificFeatureProtocol? {
    return nil
}
现在,您可以使用以下方法:

feature?.specificFeature1Method()
feature?.specificFeature2Method()

什么不起作用。您期望得到什么?请注意,
protocol
&
struct
等关键字需要小写(您的代码不会编译)。此外,类型名称应为
大写
,例如
SpecificFeature1Protocol
。否则,
specificFeature1()
看起来像一个函数调用。@Mundi:UtilFeature.feature.specificFeature1Method()将无法工作,因为commonFeatureProtocol没有specificFeature1Method()
typealias SpecificFeatureProtocol = SpecificFeature1Protocol & SpecificFeature2Protocol

var feature: SpecificFeatureProtocol? {
    return nil
}
feature?.specificFeature1Method()
feature?.specificFeature2Method()