カスタムの方法でキャストを処理したいタイプがあります。本質的に、演算子をオーバーロードしたいの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
ただし、構文を正しく取得できませんinfix
。Growable.Type
プロトコルタイプを正しく渡すことができません。これは可能ですか、それとももっと良い方法がありますか?