В моем коде я имею в виду протокол, написанный на Objective-C, в другом протоколе, написанном на Swift, вот так:
// 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 {
//...
}
Проблема в том, что хотя я предоставил реализацию C по умолчанию в протоколе A, ViewController, похоже, не может ее получить, и код не будет компилироваться из-за ошибки ViewController does not conform to C
. Было бы хорошо, если бы протокол C был написан на Swift.
В моем реальном проекте протокол C принадлежит третьей стороне (GIDSignInDelegate
), которую я не могу просто переписать. Это обычное использование, если вы хотите построить некоторую абстракцию на основе других абстракций, написанных на Objective-C.
Я создал пример проекта здесь: https://github.com/linktoming/Protocol-Demo
A
как протокол с расширением, вы можете реализовать его как подклассUIViewController
, который соответствуетC
, а затем иметь подклассViewController
изA
вместоUIViewController
. - person Rob   schedule 26.06.2016