gpt4 book ai didi

objective-c - NS_SWIFT_NAME 是否保留给工厂方法?

转载 作者:搜寻专家 更新时间:2023-10-31 08:22:33 26 4
gpt4 key购买 nike

我正在开发一个用 Objective-C 编写的库,我希望它在 Swift 上桥接时尽可能“敏捷”。

例如,具有此定义的 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)

我看到一些 SO questions提到 NS_SWIFT_NAME 仅适用于工厂方法。 Apple documentation仅提及工厂方法作为示例,但未明确说明对 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 更加友好。请不要忘记添加可空性属性。

关于objective-c - NS_SWIFT_NAME 是否保留给工厂方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39229457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com