[英]Is NS_SWIFT_NAME reserved to Factory methods?
我正在開發一個用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問題,提到NS_SWIFT_NAME
僅適用於工廠方法。 Apple文檔僅提及工廠方法作為示例,但沒有明確說明有關NS_SWIFT_NAME
的限制
據我所知,Apple的文檔中沒有明確的限制。 我們試一試吧。
包含此代碼的示例項目:
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
-(void)logProductWithId:(NSString *) productId productName:(NSString*) productName NS_SWIFT_NAME( logProduct(identifier:name:) );
@end
編譯成功,您可以將其生成的界面視為:
import Foundation
open class MyClass : NSObject {
open func logProduct(identifier productId: String!, name productName: String!)
}
沒問題。 也許你需要一些其他條件來獲得“只有工廠方法可以有'swift_name'屬性”錯誤,我還沒有透露。
似乎NS_SWIFT_NAME
不僅為工廠方法保留。 並且更好地使用它來使您的Objective-C代碼更加Swift友好。 請不要忘記放置可空性屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.