【问题标题】:Declare class variable as conforming to Swift protocol声明类变量符合 Swift 协议
【发布时间】:2014-08-17 00:08:24
【问题描述】:

在 Swift 中,我如何声明一个明确声明它符合某些协议的变量? Objective-c 等效项是 @property id<NSObject> 据我了解,这样做:

var a: NSObject

声明了一个 NSObject 协议类型的变量,但我不这样做,我想声明一个符合 AnyObject 类型的变量。我也有兴趣了解如何声明一个对象数组,其中每个对象都符合该协议。

【问题讨论】:

    标签: swift protocols


    【解决方案1】:

    这里真的不需要AnyObject;如果你关心的只是遵守协议Proto,你可以简单地写var a: Proto。 (在某些情况下,您的协议可能会使用 Self 或其他需要将其用作通用约束的东西;然后您将使用 class C<T: Proto> { var a: T }

    【讨论】:

    • 啊,所以var a: Proto 指定一致性?有趣的是,我会假设它是 Proto 类型的变量。
    • 由于Proto 是一种协议类型,因此“属于Proto 类型”除了符合性之外并没有任何意义。不幸的是,Self 警告在某些情况下会阻止您使用此语法。我预计这可能会在以后的 Swift 更新中发生变化。
    【解决方案2】:

    NSObject protocolNSObjectProtocol 的形式导入 Swift(由于与NSObject class 的名称冲突),因此,它将是

    var a: NSObjectProtocol
    

    【讨论】:

      【解决方案3】:

      在 Swift 4 中,这可能是一种更简单的方法。您可以同时声明一些符合协议的类的变量。你可以这样做:

      var someVar: ClassA & ProtocolA & ProtocolB
      

      【讨论】:

      • 像接受的答案一样,这不适用于任何具有自身或关联类型要求的协议
      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      相关资源
      最近更新 更多