OC中声明swift专属名—NS_SWIFT_NAME

OC中有一些方法、类、枚举swift调用很不方便, 比如

-(void)addString:(id<string *>)string;

-(void)addInt:(id<int>) int;

swift中的方面名都叫做  add区别参数不一致。实际上调用时候都是 self.add(any)。这时候就会报错。Ambiguous use of “add

func add (_ string : any)

func add (_ int : any)

也就是说,方法重复了,实际上在OC中这两个方法名又是不一致的。那么就需要单独来给swift一套专属方法

代码如下
对于方法

//没有参数
-(void)setStartAction NS_SWIFT_NAME(setStartAction());

//含参数
-(void)setStartAction:(int)action end:(int)end  NS_SWIFT_NAME(setStartAction(action:end:));

//含返回值,不需要注明返回值
-(BOOL)setStartAction:(int)action end:(int)end  NS_SWIFT_NAME(setStartAction(action:end:));

 对于类


NS_SWIFT_NAME(objSwift)
@interface obj1 : NSObject
@end

对于协议


NS_SWIFT_NAME(swiftProb)
@protocol QIPlayerBufferingListener <NSObject>
@end

对于属性

@property (nonatomic, strong) NSString *renderHandler NS_SWIFT_NAME(rend)

对于枚举

typedef NS_ENUM(NSInteger, QPlayerBlind) {

}NS_SWIFT_NAME(QPlayerBlindSwift);

swift方法不可见—–NS_SWIFT_UNAVAILABLE()

参数提示作用。在swift语言下,该提示并不会出现。

用法和NS_SWIFT_NAME一致,都是用在类、协议前面枚举属性方法后面

补充一点:NS_UNAVAILABLE 用法一致,效果是在OC和swift上都不可用,主要用来屏蔽一些父类方法属性

-(instancetype)init NS_SWIFT_UNAVAILABLE("该方法不可见")
//----------------------------------
NS_SWIFT_UNAVAILABLE("该类不可见")
@interface QPlayerContext : NSObject
@end


//--------------------
NS_SWIFT_UNAVAILABLE("该协议不可见")
@protocol QIPlayerBufferingListener <NSObject>
@end
//--------------------
typedef NS_ENUM(NSInteger, QPlayerBlind) {

}NS_SWIFT_UNAVAILABLE("该枚举不可见");

//---------------------

@property (nonatomic, strong) NSString *renderHandler NS_SWIFT_UNAVAILABLE("该属性不可见"); 

swift中不抛出异常——NS_SWIFT_NOTHROW

这个宏定义只能用在方法上,类、枚举、属性、协议都不可用

Swift 中的错误处理和 OC 并不相同,主要体现在,Swift 不会使用类似的 NSError 的二级指针,它采用向上抛出异常方式。该字段表示,这个方法在 Swift 中不会抛出异常

原文地址:https://blog.csdn.net/qq_36924305/article/details/127448444

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_22398.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注