将ObjC-Blocks转换为Swift Closures

 平凡小店88 发布于 2023-01-07 00:30

我试图将一些Objective-C Code翻译成Swift.我将Autolayout的Cocoapod"Masonry"添加到我的项目中,并添加了一个Bridging-Header,以便能够在Swift中使用Objective-C方法.

这个ObjC方法:

[_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self.view);
}];

应该像以下关闭:

tableView.mas_makeConstraints({ (make : MASConstraintMaker!) -> Void? in
    make.edges.equalTo(self.view)
})

但我得到一个"找不到成员'mas_makeConstraints'",这不是错误,因为该方法已编入索引并且autocomletion给了我以下内容:

tableView.mas_makeConstraints(block: ((MASConstraintMaker!) -> Void)?)

?!

我在这里做错了吗?

2 个回答
  • 如果有人遇到这种情况,我只需要2美分:

    这个objc

    [productView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.view.mas_left).with.offset(15);
        make.right.equalTo(self.view.mas_right).with.offset(15);
        make.top.equalTo(self.view.mas_top).with.offset(15);
        make.height.equalTo(productView.mas_width);
    }];
    

    会变成

    productView.mas_makeConstraints{ make in
        make.left.equalTo()(self.view.mas_left).with().offset()(15)
        make.right.equalTo()(self.view.mas_right).with().offset()(-15)
        make.top.equalTo()(self.view.mas_top).with().offset()(15)
        make.height.equalTo()(productView.mas_width)
        return ()
    }
    

    2023-01-07 01:06 回答
  • 这篇文章在方法签名中:

    (block: ((MASConstraintMaker!) -> Void)?)
    

    ...告诉你block 参数是可选的,而不是返回值,应该是Void(不是 Void?,你写的地方(make: MASConstraintMaker!) -> Void?)

    另外:因为Swift Type Inference你不需要把类型放在块中

    还有:因为Swift Trailing Closures你不需要把一个闭包作为parens中参数列表内部方法的最后一个参数(因为这里它是唯一的参数,你可以完全放弃parens)

    所以你用block参数调用的整个方法可以重写为:

    tableView.mas_makeConstraints { make in
        make.edges.equalTo(self.view)
    }
    

    最后:看起来你正在调用的实例方法make.edges返回一个块,并且由于"单个表达式块的隐式返回"的Swift便利特性,可能是你的块在它隐含地返回该表达式的值时的情况.期待Void- 所以最后,如果上述方法不起作用,您可能仍需要Void通过编写方法调用显式返回:

    tableView.mas_makeConstraints { make in
        make.edges.equalTo(self.view)
        return ()
    }
    

    2023-01-07 01:29 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有