ios - objective C block 到 swift block

标签 ios objective-c swift

我在编写 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/

相关文章:

objective-c - MacOS PDF/WKWebView 打印质量差

ios - 从 Youtube YTPlayerView 获取当前帧

iOS Swift Mute-unmute 音频像 facebook 自动播放视频

ios - 如何更改重复单元格中点击的按钮图像?

ios - 如何使用具有多个对象(几何体)的场景文件中的几何体?

ios - 当两个物理体都是动态 Sprite 套件 objective-c 时检测接触

ios - Swift 中未检测到触摸

objective-c - Core Data 是否在 SQLite 文件之外存储任何状态相关信息

ios - 使用 UIActivityViewController 在电子邮件中发送链接

swift - 将数据迁移到应用程序组禁用 iCloud 同步