1

カスタムの方法でキャストを処理したいタイプがあります。本質的に、演算子をオーバーロードしたいのasですが、これが可能かどうかはわかりません。

ここに私が持っているものがあります:

let item = MyObject()
let newItem = item as? Growable

nilただし、プロパティ値のいずれかが条件を満たさない場合はキャストしたいと考えています。私は次のようにできることを知っています:

extension MyObject {

    public func asGrowable() -> Growable? {
        switch left.type {
        case .abc: return left as Growable?
        default: return nil
        }
    }
}

let newItem = item.asGrowable() //Success
item.type = .abc
let newItem2 = item.asGrowable() //nil

ただし、演​​算子を使用してより迅速な方法を望んでいたinfixので、次のようなことができます。

func >> (left: MyObject, right: Growable.Type) -> Growable? {
    switch left.type {
    case .abc: return left as Growable?
    default: return nil
    }
}

let newItem = item >> Growable //Success
item.type = .abc
let newItem2 = item >> Growable //nil

ただし、構文を正しく取得できませんinfixGrowable.Typeプロトコルタイプを正しく渡すことができません。これは可能ですか、それとももっと良い方法がありますか?

4

0 に答える 0