22

Objective-C から Swift のプロトコル拡張で定義されたメソッドを呼び出すことは可能ですか?

例えば:

protocol Product {
    var price:Int { get }
    var priceString:String { get }
}

extension Product {
    var priceString:String {
        get {
            return "$\(price)"
        }
    }
}

class IceCream : Product {
    var price:Int {
        get {
            return 2
        }
    }
}

のインスタンスの価格文字列IceCreamは「$2」であり、Swift でアクセスできますが、メソッドは Objective-C では表示されません。コンパイラは、「'IceCream' の可視の @interface がセレクターを宣言していません ...」というエラーをスローします。

私の構成では、メソッドが Swift オブジェクトの実装で直接定義されている場合、すべてが期待どおりに機能します。すなわち:

protocol Product {
    var price:Int { get }
    var priceString:String { get }
}

class IceCream : Product {
    var price:Int {
        get {
            return 2
        }
    }
    var priceString:String {
        get {
            return "$\(price)"
        }
    }
}
4

3 に答える 3