gpt4 book ai didi

swift - 参数中的运算符(Swift)

转载 作者:行者123 更新时间:2023-11-28 16:13:48 26 4
gpt4 key购买 nike

我是 swift 编程的新手,我尝试创建一个函数,该函数基于三个参数(即运算符类型)和两个应计算的数字来解决简单的数学计算。一段时间后,我已经让它工作到我满意的程度,其中的代码如下所示:

func calculation(operatorType: String, number1: Double, number2: Double) -> Double {

if operatorType == "+" {
return number1 + number2

} else if operatorType == "-" {
return number1 - number2

} else if operatorType == "/" {
return number1 / number2

} else if operatorType == "*" {
return number1 * number2

} else {
return 0
}
}

正如我所说,它运行良好。我必须在 operatorType 中加上引号,因为它是 String 类型,我试图摆脱它们但没有成功。

但现在进入正题:

我试着让代码更简单一些,我在想:是否可以在一个代码中插入整个“使用相同的运算符作为参数”?我试过:

 if operatorType == "*" || operatorType == "-"....
return number1 + operatorType + number2

使它成为一个正确的方程式,但没有任何成功。所以我的问题是,我的想法是正确的,可以这样做,在那种情况下,怎么做?尽管它确实是基本代码,但使用更有效的方法和更少的代码会更好,这实际上也能更好地工作。

谢谢!

编辑:将名称更改为不那么模糊的名称。

最佳答案

你选择的例子是一个标准的例子来解释Higher-order Functions (HOM)。

HOM 是一个将另一个函数(或仿函数)作为输入并使用它来完成任务的函数。
在 Swift 中,一种编写它们的方法是使用闭包作为参数。

在您的示例中,您的函数不会使用字符串来切换计算,而是使用闭包。
在这个简单的例子中,函数将只执行闭包并返回值。

func calculate(op:((Int, Int)-> Int), operandA: Int, operandB: Int) -> Int {
return op(operandA, operandB)
}

你的运营商关闭看起来像

let addition: ((Int, Int)-> Int) = {
return $0 + $1
}

let substruction: ((Int, Int)-> Int) = {
return $0 - $1
}

你会像这样执行它

let result = calculate(addition, operandA: 1, operandB: 3)

这可能看起来有点过于复杂和学术,但实际上我们在 Swift 中使用的许多方法都是 HOM。 mapfilter 例如。尽管它们更高级一些,但因为它们是通用的,这意味着它们不仅可以接受 Int 参数。但我不想在这篇文章中介绍它......

关于swift - 参数中的运算符(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39300794/

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