我正在开发一个用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:) )
然后在Swift中进行翻译:
func logProduct(identifier productId: String, name productName: String)
我看到一些Stack Overflow的问题提到NS_SWIFT_NAME
只适用于工厂方法。Apple文档仅举了工厂方法作为示例,但没有明确说明NS_SWIFT_NAME
的限制。
NS_SWIFT_NAME
不仅限于工厂方法。https://developer.apple.com/documentation/swift/objective-c_and_c_code_customization/renaming_objective-c_apis_for_swift - aios