gpt4 book ai didi

swift - 如何提示在 Swift 中将哪个重写函数作为参数传递?

转载 作者:可可西里 更新时间:2023-11-01 02:23:44 26 4
gpt4 key购买 nike

我正在为斯坦福大学的 Swift MOOC 使用 Swift 构建一个基本计算器。

我有一个 switch 语句,我将中缀算术运算传递到其中(作为按钮按下的逻辑):

 let operation = sender.currentTitle!
var op_result = false
switch operation {
case "+": op_result = performOperation( + )
case "−": op_result = performOperation( - )
case "×": op_result = performOperation( * )
case "÷": op_result = performOperation( / )

default:
break
}

这将馈入具有签名的函数:func performOperation (op: (Double, Double) -> Double) -> Bool

上面的代码运行良好 - 直到我开始尝试添加平方根(单个参数)操作。我添加了一个重写的 performOperation 函数:

func performOperation (op: (Double) -> Double) -> Bool

一旦出现这个被覆盖的函数,我就开始收到上面的加号和减号情况的错误:“Double 不是 UInt8 的子类型”

我的猜测是类型推断逻辑看到的是单个参数 performOperation 变体,并假设我需要一元运算符,但我不确定。

我如何调试这个问题,或者如果我对原因的猜测是正确的,向系统提示我需要双参数中缀运算符?

最佳答案

我不知道编译器为什么不处理这个问题,但要解决这个问题,您可以明确告诉它使用 Double 版本的 +:

func f (op: (Double, Double) -> Double) -> () {

}

func f (op: Double -> Double) -> () {

}

let g: (Double, Double) -> Double = (+)
f(g)

关于swift - 如何提示在 Swift 中将哪个重写函数作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29068312/

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