如何在Swift协议扩展中提供Objective-C协议的默认实现

时间:2016-06-26 15:41:48

标签: swift swift2 swift-protocols

在我的代码中,我在用Swift编写的另一个协议中引用了用Objective-C编写的协议,如下所示:

// Objective-C
@protocol C
- (void)c;
@end

//Swift    
protocol A {
  var a : UIView { get }
}

extension A where Self: C {
  var a : UIView {
    return UIView()
  }

  func c() {
    // default implementation of c
    // self.a bla bla bla
  }
}
// Compiler will complain ViewController does not conform to C
class ViewController: UIViewController, A, C {
  //...
}

问题是即使我在协议A中提供了C的默认实现,但ViewController似乎无法获取它,并且由于ViewController does not conform to C错误,代码无法编译。如果协议C是用Swift编写的,那就没问题。

在我的实际项目中,协议C来自第三方(GIDSignInDelegate),我不能简单地重写它们。如果你想在Objective-C编写的其他抽象上构建一些抽象,这是一种常见的用法。

我在这里创建了一个示例项目:https://github.com/linktoming/Protocol-Demo

0 个答案:

没有答案