2016-09-14 44 views
0

有一些擴展的NSNumber:NSExpression NSNumber的擴展斯威夫特改變3.0

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和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) 

錯誤:操場執行中止:錯誤:執行被中斷,原因是:EXC_BAD_ACCESS(代碼= EXC_I386_GPFLT)。 該進程已停留在被中斷的位置,使用「線程返回-x」返回表達式評估之前的狀態。

如何正確地修復擴展NSNumber中的第一個錯誤?

+0

什麼是所有作品'tgamma',它從何而來? – Moritz

+2

@EricAya:這是一個標準的數學庫函數,在終端中嘗試'man tgamma'。 –

回答

0

固定由

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

和雨燕3.0