имеют некоторое расширение для 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?
Что такое 'tgamma', откуда оно взялось? – Moritz
@EricAya: Это стандартная функция математической библиотеки, попробуйте 'man tgamma' в Терминале. –