在我的代码中,我在用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