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

但是,我希望有一种更 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

我无法得到正确的语法infixGrowable.Type没有正确地允许我传入协议类型。这是可能的还是有更好的方法来做到这一点?

4

0 回答 0