我正在开发一个用Objective-C编写的库,我希望在Swift上桥接时尽可能使它成为“Swifty” .
例如,具有此定义的Objective-C方法
-(void)logProductWithId:(NSString *) productId productName:(NSString*) productName;
自动转换为此Swift函数
func logProductWithId(productId: String, productName: String)
使用 NS_SWIFT_NAME
宏来摆脱"With"是一个好习惯:
-(void)logProductWithId:(NSString *) productId productName:(NSString*) productName NS_SWIFT_NAME( logProduct(identifier:name:) )
然后迅速翻译成
func logProduct(identifier productId: String, name productName: String)
我看到SO questions提到 NS_SWIFT_NAME
仅适用于工厂方法 . Apple documentation仅提及工厂方法作为示例,但没有明确说明对 NS_SWIFT_NAME
的限制
1 回答
据我所知,Apple的文档中没有明确的限制 . 我们试一试吧 .
包含此代码的示例项目:
编译成功,您可以将其生成的界面视为:
没问题 . 也许你需要一些其他条件来获得“只有工厂方法可以有'swift_name'属性”错误,我还没有透露 .
似乎
NS_SWIFT_NAME
不仅仅为工厂方法保留 . 并且更好地使用它来使您的Objective-C代码更加Swift友好 . 请不要忘记放置可空性属性 .