我试图使一个Objective-C委托协议更漂亮,以便在Swift中使用,并且在弄清楚如何使用NS_SWIFT_NAME
时遇到了一些麻烦。是否可以使用NS_SWIFT_NAME
在Swift名称中指定与Objective-C关键字(特别是for
和in
)同名的参数?
这不会建立:
@protocol MyContainerDelegate
-(NSInteger)myContainerContentsCount:(MyContainer *)container
NS_SWIFT_NAME(contentsCount(in container:));
@end
但是如果我将其声明为NS_SWIFT_NAME(contentsCount(inContainer:))
,它就可以工作。
我敢肯定,我已经见过Swift方法,它们的外部参数名称使用for
或in
,但是我不知道在哪里可以找到这样的示例定义。可以用NS_SWIFT_NAME
完成吗?
答案 0 :(得分:3)
问题不是关键字,而是您指定了两个参数
NS_SWIFT_NAME
中的标签和参数名称。参数标签
足够了。与
@protocol MyContainerDelegate
-(NSInteger)myContainerContentsCount:(MyContainer *)container
NS_SWIFT_NAME(contentsCount(in:));
@end
该协议导出为Swift
public protocol MyContainerDelegate {
public func contentsCount(in container: MyContainer!) -> Int
}