मैं यह जानने का प्रयास कर रहा हूं कि जावास्क्रिप्ट को तेजी से कैसे उपयोग करें। मैं समस्याओं में भाग रहा हूं, हालांकि जब मुझे तर्कों के रूप में ब्लॉक से निपटना पड़ता है, ऐसा लगता है कि ब्लॉक तुरंत चलाया जाता है और तर्कों को ब्लॉक का रिटर्न वैल्यू मिलता है। मैं क्या गलत कर रहा हूं?स्विफ्ट ब्लॉक काम नहीं कर रहे
कार्य उद्देश्य सी कोड:
JSContext* context = [[JSContext alloc] initWithVirtualMachine:[[JSVirtualMachine alloc] init]];
context[@"test"] = ^(NSString *string) {
//code
};
मैं क्या कोशिश की है:
1:
var ctx = JSContext(virtualMachine:JSVirtualMachine())
var ctx["test"] = {(string:NSString)->() in /*code*/ }
//Gives me "'JSContext' does not have a member named 'subscript'"
2:
var ctx = JSContext(virtualMachine:JSVirtualMachine())
let n: (string: String)->() = {string in /*code*/}
ctx.setObject(n, forKeyedSubscript:"test")
//Gives me "Type '(x: String) ->() does not conform to protocol 'AnyObject'"
3:
var ctx = JSContext(virtualMachine:JSVirtualMachine())
let n: (string: String)->() = {string in /*code*/}
ctx.setObject(n as AnyObject, forKeyedSubscript:"test")
//Gives me "Cannot downcast from '(string: String) ->() to [email protected] protocol type 'AnyObject'"
क्या मुझे यहां कुछ याद आ रहा है, या यह स्विफ्ट में बस एक बग है?
संपादित करें: से Cast closures/blocks
class Block<T> {
let f : T
init (_ f: T) { self.f = f }
}
मैं अब भी कोशिश की है सुझाव और फिर
ctx.setObject(Block<()->Void> {
/*code*/
}, forKeyedSubscript: "test")
यह समाधान मुझे संकलन की सुविधा देता है, लेकिन मैं एक रनटाइम त्रुटि मिलती है:
Thread 1: EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
इस जैसा ही समस्या है: http://stackoverflow.com/questions/24586293/cast-closures-blocks। –
यह समान लेकिन अलग है। यह सवाल * ओबीजेसी विधियों से * रिटर्न वैल्यू * के रूप में प्राप्त ब्लॉकों से निपटने के बारे में है। यह * ओबीजेसी विधियों के लिए ब्लॉक * के रूप में स्विफ्ट बंद करने के बारे में है। –