Как обеспечить реализацию протокола Objective-C по умолчанию в расширении протокола Swift

В моем коде я имею в виду протокол, написанный на 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


person Mingming    schedule 26.06.2016    source источник
comment
Расширения протокола Swift недоступны из кода Objective-C. В этом случае кажется, что если протокол был написан из Objective-C, он будет вызываться из Objective-C, но это невозможно, если реализация полагается на реализацию по умолчанию в расширении протокола Swift. .   -  person Rob    schedule 26.06.2016
comment
Вместо того, чтобы реализовывать A как протокол с расширением, вы можете реализовать его как подкласс UIViewController, который соответствует C, а затем иметь подкласс ViewController из A вместо UIViewController.   -  person Rob    schedule 26.06.2016
comment
@ Роб, верно, это один из вариантов. Я использовал аналогичный подход с использованием конкретного класса, но используя его как член вместо родительского класса. Я не хочу вводить ответственность, не связанную с венчурным капиталом, в венчурный капитал.   -  person Mingming    schedule 27.06.2016