Swift 中的 Objective-C 方法参数

Posted

技术标签:

【中文标题】Swift 中的 Objective-C 方法参数【英文标题】:Objective-C Method Parameters in Swift 【发布时间】:2017-11-05 22:59:26 【问题描述】:

调用在 Objective-C 中声明并桥接到 Swift 的方法时遇到一些问题。我在有问题的方法旁边创建了一个 void 方法并且能够调用它,所以我很确定它与桥接处理方法参数的方式有关。

- (void)foo;

- (NSArray *)fetchProductHistoryForProduct:(Product *)product
                               forCustomer:(Customer *)customer
                                  forField:(Field *)field
                                  forRange:(DatePickerRange *)range
                                 inContext:(CPSPersistenceController *)context;

然后在 Swift 文件中我这样调用每个:

modelUtil.foo()

let result = modelUtil.fetchProductHistoryForProduct(product, forCustomer: nil, forField: nil, forRange: nil, inContext: nil)

Swift 抱怨“'ModelUtil' 类型的值没有成员 'fetchProductHistoryforProduct'

你能告诉我我做错了什么吗?

【问题讨论】:

【参考方案1】:

您可以从编辑器窗口的左上角看到为目标 c 文件生成的界面。生成的接口就像你的 ObjC 文件的 Swift 头文件,它应该告诉你方法的确切名称。还要确保将所有包含参数类型的文件也添加到 bridging-header。

【讨论】:

【参考方案2】:

您可以使用 Xcode 自动完成功能来查找调用序列。在这种情况下,forProduct: 成为第一个参数的标签:

let result = modelUtil.fetchProductHistory(forProduct: product, forCustomer: nil, forField: nil, forRange: nil, inContext: nil)

【讨论】:

以上是关于Swift 中的 Objective-C 方法参数的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C:Swift Package 函数中的多参数方法语法

Objective-C++ 和 Swift - 桥接头中的嵌套结构

什么是与Objective-C中的getConstraintForFirstItem等效的swift方法

Swift与Objective-C中的命名方法

协议作为 swift 冲突中的参数类型

Swift - 带有Objective-C选择器'*'的方法'*()'与具有相同Objective-C选择器的超类'UIView'中的'*'的getter冲突