2016-03-14 68 views
1

好的球員,我掙扎與此:我已經成功地使自定義函數不帶參數的工作是這樣的:如何將參數傳遞給Swift中NSExpression的自定義NSNumber函數?

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中。有什麼辦法可以做到嗎?順便說一句,這是我的計算器應用程序。

回答

1

我得到了下面的代碼在Xcode 7.2.1操場上工作。您收到的錯誤與選擇器有關,選擇器要記住的主要問題是,在這種情況下,函數的名稱後面需要冒號(:)來表示函數具有單個參數。

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) 
相關問題