创建中缀运算符以转换为协议?

时间:2016-08-24 12:44:35

标签: swift swift2 infix-operator

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

0 个答案:

没有答案