【问题标题】:Swift: the type of a class that implements a protocol [duplicate]Swift:实现协议的类的类型
【发布时间】:2015-04-14 23:46:17
【问题描述】:

在 Objective-C 中,您可以在返回值中指定类名和一组协议。例如,作为 UIScrollViewDelegate 的 UIViewController:

- (UIViewController<UIScrollViewDelegate> *) viewDelegate;

我找不到在 Swift 中表达这一点的方法。这样的事情失败了,因为 UIViewController 不是协议:

func viewDelegate() -> protocol<UIViewController, UIScrollViewDelegate>;

【问题讨论】:

  • 只是想知道为什么需要在返回类型上声明协议?
  • @Woodstock 返回值需要实现类和协议中的方法。类型检查器最好强制执行它而不是在运行时检查。

标签: objective-c swift


【解决方案1】:

您可以创建一个带有约束的通用函数。这是否满足您的用例?

  func viewDelegate<T: UIViewController, UIScrollLViewDelegate>() -> T {

    var t = T()

    return t;

  }

【讨论】:

  • 看起来不错!但我应该提到这个项目仍然主要是 Objective-C,而且看起来泛型函数不向后兼容。我收到编译器错误Method cannot be marked @objc because its result type cannot be represented in Objective-C,因为它是@objc
  • 标记为解决方案,因为我认为没有一种方法可以兼容 ObjC。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 2017-03-19
相关资源
最近更新 更多