2016-09-14 4 views
0

имеют некоторое расширение для NSNumber:расширение NSExpression NSNumber изменено в Swift 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 и 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) 

ошибка: площадка выполнение прерывалось: ошибка: выполнение было прервано, причина: EXC_BAD_ACCESS (код = EXC_I386_GPFLT). Процесс оставлен в точке, где он был прерван, используйте «thread return -x», чтобы вернуться к состоянию перед оценкой выражения.

как правильно исправить первую ошибку в расширении NSNumber?

+0

Что такое 'tgamma', откуда оно взялось? – Moritz

+2

@EricAya: Это стандартная функция математической библиотеки, попробуйте 'man tgamma' в Терминале. –

ответ

0

фиксируется

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

и все работы в Swift 3.0

Смежные вопросы