【问题标题】:Specify a class that implements a protocol [duplicate]指定一个实现协议的类[重复]
【发布时间】:2016-11-08 07:53:55
【问题描述】:

鉴于有两个协议P1P2,可以指定一个符合这两个协议的类型,例如:

typealias P = protocol<P1, P2>

是否有类似的方法来指定一种类型,它是类的一种,也符合协议,例如像这样的东西(不起作用):

typealias P = UIView: P1

【问题讨论】:

  • 请阅读this thread。它最初是在 Swift 1 时代发布的,到了即将到来的 Swift 3 时代,这个问题仍然存在。 Swift 仍然没有表达这种类型的能力。
  • Swift 提出的观点是,如果你的架构设计得好,你就不需要这样做。
  • @OOPer 谢谢,那里的例子与我试图实现的非常相似。

标签: swift swift-protocols


【解决方案1】:

不幸的是,它在 Swift 2.2 中是不可能的,并且不会在 Swift 3.0 中添加。 您想为继承某些类并实现协议的类型创建Type 规则的想法。

因此,您将拥有这样的层次结构并拥有要存储此类之一的属性并不是很常见。 同样在 POP 范例中,您应该有额外的协议,为您提供 UIView 所需的属性。


也许你有这样的用例:

然后创建附加类:

你的类型是P1Base


附:这就是为什么如果你在 Obj-c 中创建 @property (nonatomic) UIViewController&lt;UITableViewDelegate&gt; *protocolClassProperty;,它会在 Swift 中桥接为 UIViewController!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多