我在使用swift调用方法的目标C中编写方法时遇到了麻烦。我已经正确设置了所有标题,并且简单的方法正在运行但是我不知道如何编写此块的目标C端。
我的快速课程
我试图打电话的功能:
func getOrders(completionHandler: (responseObject: NSString?) -> ()) {
makeCall(completionHandler)
}
我如何在swift中(以及我想在Objective-C中做什么):
getOrders() { responseObject in
// use responseObject and error here
println("responseObject = \(responseObject); error = ")
return
}
这是我对 objective-C 阻止的尝试:
[billingService getOrders:completionHandler:^(NSString * responseObject) {
NSLog(@"objective c callback: %@",responseObject);
}];
通过上述内容我可以使用未声明的标识符' completionHandler'
我只是不确定如何使这项工作或在目标c中构建一个正确的块。
答案 0 :(得分:5)
如果您不确定如何在Objective C中使用Block,请查看以下链接: http://fuckingblocksyntax.com/(http://goshdarnblocksyntax.com/ - SFW替代方案)
要恢复: 作为局部变量:
returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};
作为财产:
@property (nonatomic, copy) returnType (^blockName)(parameterTypes);
作为方法参数:
- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
作为方法调用的参数:
[someObject someMethodThatTakesABlock:^returnType (parameters) {...}];
作为typedef:
typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};
如果你需要帮助在swift中使用block,请使用此链接: https://thatthinginswift.com/completion-handlers/
Objective-c
- (void)hardProcessingWithString:(NSString *)input withCompletion:(void (^)(NSString *result))block;
[object hardProcessingWithString:@“commands” withCompletion:^(NSString *result){
NSLog(result);
}];
}
斯威夫特
func hardProcessingWithString(input: String, completion: (result: String) -> Void) {
…
completion(“we finished!”)
}
hardProcessingWithString(“commands”) {
(result: String) in
println(“got back: (result)“)
}
因此,对于您的问题,可能是:
[billingService getOrders: ^(NSString * responseObject) {
NSLog(@"objective c callback: %@",responseObject);
}];
希望它有所帮助!