2016-09-14 1 views
0

ont une extension pour NSNumber:NSExpression NSNumber extension modifiée à Swift 3.0

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

puis-je utiliser cette extension dans mon calcul

var stringFunction: String = "FUNCTION(10,'factorialF')" 
var expn: NSExpression = NSExpression(format: stringFunction) 
var result = expn.expressionValueWithObject(with: nil, context: nil) 

dans Xcode 7.3.1 et Swift 2.2 tous les travaux, mais dans Xcode 8 et Swift 3.0 j'ai une erreur dans mon extension NSNumber "No 'tgamma' candidats produisent le type de résultat contextuel attendu 'NSNumber'"

J'ai été corrigé cette erreur, mais obtenir de nouveaux

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) 

i got nouvelle erreur ici

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

erreur: exécution de jeux avortés: erreur: exécution a été interrompue, la raison: EXC_BAD_ACCESS (code = EXC_I386_GPFLT). Le processus a été laissé à l'endroit où il a été interrompu, utilisez "thread return -x" pour revenir à l'état avant l'évaluation de l'expression.

comment corriger corriger la première erreur dans l'extension NSNumber?

+0

Qu'est-ce 'tgamma', où est-il? – Moritz

+2

@EricAya: C'est une fonction de bibliothèque mathématique standard, essayez 'man tgamma' dans le Terminal. –

Répondre

0

fixé par

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

et tous les travaux à Swift 3.0