我有一种类型,我想以自定义方式处理。从本质上讲,我想让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
运算符更加Swifty,所以我可以这样做:
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
未正确允许我传入协议类型。这有可能还是有更好的方法来做到这一点?