gpt4 book ai didi

Swift歧义重载+运算符

转载 作者:可可西里 更新时间:2023-11-01 02:13:51 25 4
gpt4 key购买 nike

它可能是如此简单,但出于某种原因,swift 不喜欢我对 + 运算符的实现...
我有一个简单的数字协议(protocol):

protocol Number : CustomStringConvertible {

var doubleValue: Double { get }

}

同样的简单实现:

struct SimpleNumber : Number {

let doubleValue: Double
let description: String

init(_ double: Double) {
doubleValue = double
description = "\(double)"
}
}

以及运算符重载的扩展:

extension Number {

static func + (lhs: Number, rhs: Number) -> Number {
return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
}
}

到目前为止,还不错。但是现在,当我尝试使用该运算符时:

let number1: Number = SimpleNumber(1)
let number2: Number = SimpleNumber(2)
let number3: Number = number1 + number2;

Xcode 告诉我,运算符不明确。
所以为什么?我的定义是唯一适合两个 Number 对象的定义。
我做错了什么?

最佳答案

+ 运算符不应该在扩展中,而是一个全局的 func。替换您对 + 的定义:

extension Number {    
static func + (lhs: Number, rhs: Number) -> Number {
return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
}
}

简单地

func + (lhs: Number, rhs: Number) -> Number {
return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
}

它会起作用的。我猜你所做的是创建了一个静态函数 Number.+,而不是你正在使用的全局函数 +...

关于Swift歧义重载+运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39873185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com