繁体   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