【问题标题】:can't redefine infix + operator in swift无法快速重新定义中缀 + 运算符
【发布时间】:2015-03-28 17:02:05
【问题描述】:

我希望能够添加两个 (Int,Int) 元组。所以我定义了

func + (left:(Int,Int), right:(Int,Int)) -> (Int,Int) {
    return (left.0 + right.0, left.1 + right.1)
}

但是 Xcode 不高兴,说:

一行上的连续声明必须用';'分隔

我的中缀操作有什么问题?

【问题讨论】:

    标签: swift infix-operator


    【解决方案1】:

    好的,我留下这个问题,因为其他人可能会觉得它很有用,但我找到了答案。原来操作符只能在全局范围内定义——至少 xcode 刚刚告诉我的是这样。所以我将 + 的定义移出了它所在的类,现在一切正常。如果你想在一个结构上定义一个运算符,我仍然不确定你会做什么,比如说,它只在一个类中定义,但是嘿,我只需要它用于 Int 元组......

    【讨论】:

    • 所以你的问题与元组无关......也许更新标题和问题以便让未来的读者清楚。实际上,您现在的问题似乎与stackoverflow.com/questions/24467960/swift-equatable-protocolstackoverflow.com/questions/24148135/… 重复
    • 谢谢马丁。但是关于它是重复的,虽然答案是一样的,但我认为问题不是。在我试图找到答案未成功后,我问了它:您提供的链接专门关于 equatable 协议,而我的答案是关于运营商的。但我会删除元组标签...
    【解决方案2】:

    如果要在类/结构级别定义中缀运算符,则必须将其标记为static。例如:

    struct Foo {
        var prop: Int
    
        static func + (lhs: Foo, rhs: Foo) -> Foo {
            return Foo(prop: lhs.prop + rhs.prop)
        }
    }
    

    【讨论】:

    • 为什么投反对票?我很确定这是正确的;我在自己的代码中使用了类似的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多