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选择器'*'的方法'*()'与具有相同Objective-C选择器的超类'UIView'中的'*'的getter冲突