【问题标题】:Trouble with Objective-C Block in SwiftSwift 中 Objective-C 块的问题
【发布时间】:2015-07-16 04:13:28
【问题描述】:

我正在努力从我在 Github 上找到并导入到我的 Swift 项目中的 Objective C 文件中访问一个块。

这是我导入的 .m 文件中的 Objective C 块声明:

-(void)capture:(void (^)(LLSimpleCamera *camera, UIImage *image, NSDictionary *metadata, NSError *error))onCapture exactSeenImage:(BOOL)exactSeenImage;

这是原始 Objective C Github 示例项目中调用的块:

[self.camera capture:^(LLSimpleCamera *camera, UIImage *image, NSDictionary *metadata, NSError *error) {
        if(!error) {

            [camera stop];

            ImageViewController *imageVC = [[ImageViewController alloc] initWithImage:image];
            [self presentViewController:imageVC animated:NO completion:nil];
        }
    } exactSeenImage:YES];

我的 Swift 翻译(通过自动完成完成):

self.camera?.capture({ (camera:LLSimpleCamera!, image:UIImage!, metadata:NSDictionary!, error:NSError!) -> Void in
        if error == nil {

            camera.stop()

            let imageVC = ImageCapturedViewController()
            self.presentViewController(imageVC, animated: NO, completion: nil)
        }
    }, exactSeenImage: true)

Xcode 显示这两个错误:

'_??'不能转换为“无效”

'错误类型?'不能转换为“无效”

【问题讨论】:

    标签: ios objective-c swift methods


    【解决方案1】:

    这是因为如果block没有return语句,编译器会使用最后一条语句的结果作为返回值

    将 return () 作为最后一个表达式添加到块中可以解决问题

    【讨论】:

      【解决方案2】:

      这应该可以解决问题:)

      var aa:LLSimpleCamera = LLSimpleCamera()
      

      swift 有一些转换为 [NSObject:AnyObject] 的 NSDictionary,所以下面的代码可以解决问题:

      aa.capture({ (camera:LLSimpleCamera!, image:UIImage!, obj:[NSObject:AnyObject]!, error:NSError!) -> Void in
      
      }, exactSeenImage: true)
      

      另外,在swift中,您也可以省略变量的类型,如下所示:

      aa.capture({ (camera, image, dict, error) -> Void in
      
      }, exactSeenImage: true)
      

      【讨论】:

      • 我认为这行得通,因为它构建并运行,但是当我实际按下应用程序中的按钮运行块时,它现在显示“以 NSException 类型的未捕获异常终止”。想法?
      猜你喜欢
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多