swift如何使用Obj-C类中定义的ns_options

Som*_*Lee 1 ios

我必须在我的swift项目中使用Objctive-C静态库.其他一切顺利,但在Objc-C头文件中定义的NS_OPTIONS枚举,如下所示:

#import <Foundation/Foundation.h>

typedef NS_OPTIONS(NSUInteger, MyOption) {
    MyOptionNone   = 0,
    MyOptionTop    = 1 << 0,
    MyOptionLeft   = 1 << 1,
    MyOptionBottom = 1 << 2,
    MyOptionRight  = 1 << 3
};

@interface MyObjcClass : NSObject

@end
Run Code Online (Sandbox Code Playgroud)

然后在.swift文件中,我怎么能在switch-case中使用这个枚举?

编辑:我在我的快速课程中使用MyOption:

let option1:MyOption = .Top
let option2:MyOption = .Bottom
let value = option1 & option2
Run Code Online (Sandbox Code Playgroud)

然后我得到编译错误:

Binary operator '&' cannot be applied to two MyOption operands
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

rob*_*off 10

首先,您需要修复语法.在结束括号后你需要一个分号:

typedef NS_OPTIONS(NSUInteger, MyOption) {
    MyOptionNone   = 0,
    MyOptionTop    = 1 << 0,
    MyOptionLeft   = 1 << 1,
    MyOptionBottom = 1 << 2,
    MyOptionRight  = 1 << 3
};
Run Code Online (Sandbox Code Playgroud)

接下来,在桥接标头中,您需要导入定义的头文件MyOption.当您首次为Objective-C项目创建Swift源文件时,或者在Swift项目中首次创建Objective-C源文件时,Xcode会为您创建桥接头.它被命名了ProjectName-Bridging-Header.h.例如:

桥头

一旦你完成了这个,并且两个头文件都可以编译而没有错误,你可以使用MyOptionSwift.这是一个OptionSetType.例:

MyOption用法