簡體   English   中英

NS_SWIFT_NAME是否保留為Factory方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM