扩展 - 错误(Swift3)
问题描述:
我有计算因子的代码。扩展 - 错误(Swift3)
我试图使用 扩展另一个文件“字符串+ Factorial.swift”这样做,但我得到一个错误。
如何将其删除?
尚未与扩展
ViewController.swift
@IBAction func FactorialButton(_ sender: UIButton) {
currentInput = factorial(currentInput: currentInput)
}
字符串+ Factorial.swift
import Foundation
extension Double {
func factorial(currentInput: Double) -> Double {
if currentInput >= 0 {
return currentInput == 0 ? 1 : currentInput * self.factorial(currentInput: currentInput - 1)
} else {
return 0/0
}
}
}
答
看起来好像你误解了扩展的概念。如果使用函数扩展现有类型,那么该函数将是该类型的实例函数(除非您将其定义为类/静态函数),因此您需要在类的实例上调用该函数。
在你的情况,你需要调用factorial
上currentInput
这样的:currentInput = currentInput.factorial(currentInput: currentInput)
答
尝试拆卸使用此代码, 它会工作罚款
@IBAction func FactorialButton(_ sender: UIButton) {
currentInput = currentInput.factorial(currentInput: currentInput)}
答
我想你是误会是什么扩展。
如果你有Double
扩展中的factorial
方法,你将能够使用它像这样:
6.0.factorial()
不喜欢:
factorial(currentInput: 6.0)
您当前的方法试图一举两得。您目前的方法只能这样使用:
6.0.factorial(currentInput: 6.0)
这没什么意义。
这是你应该如何实现它的。
func factorial() -> Double {
if self >= 0 {
return self == 0 ? 1 : self * (self - 1).factorial()
} else {
return 0/0
}
}
请注意如何将每个currentInput
替换为self
。在一个Double
扩展中,self
是一个双精度型,您正在调用该方法。
现在你可以这样调用:
currentInput.factorial()
然而,在Double
做一个阶乘在我看来有点不可思议。 Double
s是不准确的,当你减去1很多次这个不准确性变得明显。最终可能会得到-0.0000000000000001
,而不是0
。这将导致>= 0
失败并返回NaN。
这只是我的看法,但我认为这样做factorial
作为一个全球性的功能更可读的,就像这样:
factorial(6.0)
调用'currentInput = currentInput.factorial(currentInput:currentInput)' –
一个简单的问题,如果你发送了“3.0”的double值,你得到的OP为6.0,否则 –