たとえば、既存の Objective-C クラスから Swift プロトコルを抽出したいと考えていますMyFoo
。このプロトコルを と呼びましょうFooProtocol
。
状況は次のようになります。
// In Objective-C
@interface MyFoo
@property(nonatomic, copy) NSString *foo;
@end
@implementation MyFoo
// ... -(instancetype)initWithString: is implemented here
@end
// In Swift
@objc protocol FooProtocol {
var foo: String { get set }
}
extension MyFoo: FooProtocol {
// do nothing here!
}
次に、これを行うことを許可する必要があります。
let theFoo: FooProtocol = MyFoo(string: "Awesome")
NSLog("\(theFoo.foo)") // Prints awesome.
しかし、「MyFoo はプロトコル FooProtocol に準拠していません」と言われます。わかった。当然のことですが、プロトコル拡張には少しの調整が必要だと思います。
extension MyFoo: FooProtocol {
var foo: String! { get { return foo } set { NSLog("noop") }}
}
しかし、コンパイラから次のようなエラーが表示されます
Getter for 'foo' with Objective-C selector 'foo' conflicts with previous declaration with the same Objective-C selector
私は何を間違っていますか?