0

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 にエラーがあります。

私はこのエラーを修正しましたが、新しいものを取得します

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)。プロセスは中断された時点で残っています。式の評価前の状態に戻すには、"thread return -x" を使用します。

拡張 NSNumber の最初のエラーをどのように修正しますか?

4

1 に答える 1

0

によって修正されました

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

すべてSwift 3.0で動作します

于 2016-09-14T15:16:44.613 に答える