我在编写 Objective-C 中调用 swift 方法的方法时遇到了问题。我的所有 header 都已正确设置并且简单的方法正在运行,但我不确定如何编写此 block 的 Objective-C 端。
我的 swift 类
我要调用的函数:
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 block 的尝试:
[billingService getOrders:completionHandler:^(NSString * responseObject) {
NSLog(@"objective c callback: %@",responseObject);
}];
在上面我使用了未声明的标识符'completionHandler'
我只是不确定如何使它工作或在 objective-c 中构建正确的 block 。
最佳答案
如果您不确定如何在 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 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);
}];
}
swift
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);
}];
希望对您有所帮助!
关于ios - objective C block 到 swift block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30264237/