我有一种类型,我想以自定义方式处理投射。本质上,我想重载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
但是,我希望有一种更 Swifty 的方式使用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
没有正确地允许我传入协议类型。这是可能的还是有更好的方法来做到这一点?