NSExpression\NSNumber 扩展在 Swift 3.0 中更改 [英] NSExpression\NSNumber extension changed in Swift 3.0

查看:41
本文介绍了NSExpression\NSNumber 扩展在 Swift 3.0 中更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对 NSNumber 有一些扩展:

have some extension for NSNumber:

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

然后我在计算中使用这个扩展

then i use this extension in my calculation

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’"

in Xcode 7.3.1 and Swift 2.2 all works but in Xcode 8 and Swift 3.0 i have some error in my extension NSNumber "No 'tgamma' candidates produce the expected contextual result type 'NSNumber'"

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

i was fixed this error but get new

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"返回到表达式求值前的状态.

error: Playground execution aborted: error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=EXC_I386_GPFLT). The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation.

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

how correct fix the first error in extension NSNumber?

推荐答案

fixed by

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

所有的作品都在 Swift 3.0 中

and all works in Swift 3.0

这篇关于NSExpression\NSNumber 扩展在 Swift 3.0 中更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆