前段时间我同学写的 OC 版本的 SDK 给第三方用,第三方用 Swift 写的我的项目,不会应用 Swift 去调用 OC 的枚举,起初我同学找到我,我就给他写了一下,废话不多说,间接上代码。
OC 枚举:
typedef NS_ENUM(NSInteger, SwiftUseOCEnum) {
SwiftUseOCEnumNone = 1<<0,
SwiftUseOCEnumOne = 1<<1,
SwiftUseOCEnumTwo = 1<<2,
SwiftUseOCEnumThree = 1<<3,
};
@interface Test : NSObject
-(void)test:(SwiftUseOCEnum)ocEnum;
@end
OC 枚举多枚举实现:
-(void)test:(SwiftUseOCEnum)ocEnum{
if(ocEnum == SwiftUseOCEnumNone){NSLog(@"SwiftUseOCEnumNone");
}else if (ocEnum == SwiftUseOCEnumOne) {NSLog(@"SwiftUseOCEnumOne");
}else if (ocEnum == SwiftUseOCEnumTwo) {NSLog(@"SwiftUseOCEnumTwo");
}else if (ocEnum == SwiftUseOCEnumThree) {NSLog(@"SwiftUseOCEnumThree");
}else{ // 传了多个枚举进来
if((ocEnum & SwiftUseOCEnumNone) == SwiftUseOCEnumNone){NSLog(@"多个枚举蕴含了 SwiftUseOCEnumNone");
}
if((ocEnum & SwiftUseOCEnumOne) == SwiftUseOCEnumOne){NSLog(@"多个枚举蕴含了 SwiftUseOCEnumOne");
}
if((ocEnum & SwiftUseOCEnumTwo) == SwiftUseOCEnumTwo){NSLog(@"多个枚举蕴含了 SwiftUseOCEnumTwo");
}
if((ocEnum & SwiftUseOCEnumThree) == SwiftUseOCEnumThree){NSLog(@"多个枚举蕴含了 SwiftUseOCEnumThree");
}
}
}
Swift 应用 OC 枚举多枚举:
// 单个 OC 枚举应用
let none = SwiftUseOCEnum.init(rawValue: SwiftUseOCEnum.none.rawValue) ?? SwiftUseOCEnum.none
// 多个 OC 枚举应用
let oneAndTwo = SwiftUseOCEnum.init(rawValue: (SwiftUseOCEnum.one.rawValue | SwiftUseOCEnum.two.rawValue)) ?? SwiftUseOCEnum.none
let testInstance = Test()
testInstance.test(none)
testInstance.test(oneAndTwo)