NSExpression \ NSNumber扩展在Swift 3.0中已更改

时间:2016-09-14 15:06:28

标签: swift swift3 nsnumber nsexpression

对NSNumber有一些扩展名:

extension NSNumber {
    func factorialF() -> NSNumber {
        return tgamma(self.doubleValue + 1)
    }
}

然后我在计算中使用此扩展名

var stringFunction: String = "FUNCTION(10,'factorialF')"
var expn: NSExpression = NSExpression(format: stringFunction)
var result = expn.expressionValueWithObject(with: nil, context: nil)
Xcode 7.3.1和Swift 2.2中的

都可以工作但是在Xcode 8和Swift 3.0中我的扩展名NSNumber中有一些错误" No' tgamma'候选人产生预期的上下文结果类型' NSNumber'"

我修复了这个错误,但得到了新的

extension NSNumber {
    func factorialF() -> Double {
        return tgamma(self.doubleValue + 1)
    }
}
var stringFunction: String = "FUNCTION(10,'factorialF')"
var expn: NSExpression = NSExpression(format: stringFunction)
var result = expn.expressionValue(with: nil, context: nil)

我在这里遇到了新的错误

var result = expn.expressionValue(with: nil, context: nil)

错误:游乐场执行中止:错误:执行被中断,原因:EXC_BAD_ACCESS(代码= EXC_I386_GPFLT)。 该过程一直处于中断状态,使用"线程返回-x"在表达评估之前返回状态。

如何正确修复扩展名NSNumber中的第一个错误?

1 个答案:

答案 0 :(得分:0)

修复
extension NSNumber {
    func factorialF() -> NSNumber {
        return tgamma(self.doubleValue + 1) as NSNumber
    }
}

并且所有工作都在Swift 3.0中