【问题标题】:NSExpression\NSNumber extension changed in Swift 3.0NSExpression\NSNumber 扩展在 Swift 3.0 中改变
【发布时间】:2016-09-14 15:06:27
【问题描述】:

有一些 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 “没有 '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)

错误:Playground 执行中止:错误:执行被中断,原因:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)。 进程一直停留在中断点,使用“thread return -x”返回表达式求值前的状态。

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

【问题讨论】:

  • 什么是tgamma,它来自哪里?
  • @EricAya:这是一个标准的数学库函数,在终端中尝试man tgamma

标签: swift swift3 nsnumber nsexpression


【解决方案1】:

修复

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

所有的作品都在 Swift 3.0 中运行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2017-01-22
    相关资源
    最近更新 更多