作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧伙计们,我正在努力解决这个问题:我已经设法使没有参数的自定义函数像这样工作:
NSExpression(format: "function(1+1, 'myCustomFunction'").expressionValueWithObject(nil, context: nil) as! Double
但我不知道如何使用参数实现自定义函数,我已经尝试将以下字符串传递给 NSExpression 但没有成功:
"function(1+1, 'myCustomFunctionWithArgument(42)')" // 42 as the argument
自定义函数的样子:
public extension NSNumber {
func myCustomFunctionWithArgument(x: Double) -> NSNumber
//...
}
但是我得到以下错误:
-[__NSCFNumber myCustomFunctionWithArgument(42)]: unrecognized selector sent to instance 0xb000000000000045
2016-03-14 18:23:00.755 MyApp[3517:263390] *** Terminating app due to uncaught exception
我已经到处搜索了,但我只找到了 Objective-C 的答案,就像本教程中的那样: https://spin.atomicobject.com/2015/03/24/evaluate-string-expressions-ios-objective-c-swift/#comment-549856
最后他解释了如何在 Objective-C 上而不是在 Swift 上做到这一点。有什么办法吗?顺便说一句,这是我的计算器应用程序。
最佳答案
我得到了下面的代码,可以在 Xcode 7.2.1 Playground 上工作。您收到的错误与选择器有关,选择器要牢记的主要事情是,在这种情况下,函数名称后需要一个冒号 (:) 来表示该函数只有一个参数。
import Foundation
public extension NSNumber {
func myCustomFunctionWithArgument(x: NSNumber) -> NSNumber {
return self.doubleValue + x.doubleValue
}
}
let stringExpression = "function(1+1, 'myCustomFunctionWithArgument:', 42)"
let expression = NSExpression(format: stringExpression)
let result = expression.expressionValueWithObject(nil, context: nil) as! NSNumber
print(result.doubleValue)
关于swift - 如何在 Swift 中将参数传递给 NSExpression 的自定义 NSNumber 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998610/
我是一名优秀的程序员,十分优秀!