我正在尝试通过转换我编写的现有Objective-C应用程序(流式音频播放器)来学习Swift。但是,我正在使用的库没有Swift等价物,所以我创建了一个桥接头并成功引用它们。
现在,我正试图从其中一个库中切换enum
,但Swift只是抱怨。
为了让事情变得更加混乱(对我来说,可能不适合你们),一系列if
块工作正常。
以下是Objective-C库中的枚举:
typedef enum {
kFsAudioStreamRetrievingURL,
kFsAudioStreamStopped,
kFsAudioStreamBuffering,
kFsAudioStreamPlaying,
kFsAudioStreamPaused,
kFsAudioStreamSeeking,
kFSAudioStreamEndOfFile,
kFsAudioStreamFailed,
kFsAudioStreamRetryingStarted,
kFsAudioStreamRetryingSucceeded,
kFsAudioStreamRetryingFailed,
kFsAudioStreamPlaybackCompleted,
kFsAudioStreamUnknownState
} FSAudioStreamState;
这有效:
if (state == kFsAudioStreamRetrievingURL) {
}
if (state == kFsAudioStreamStopped) {
}
if (state == kFsAudioStreamBuffering) {
}
但这不起作用:
switch state {
case kFsAudioStreamRetrievingURL:
case kFsAudioStreamStopped:
case kFsAudioStreamBuffering:
break;
}
第二个给出了以下错误:
Binary operator '~=' cannot be applied to two 'FSAudioStreamState' operands
我很感激帮助我学习更多Swift的任何帮助!
答案 0 :(得分:0)
试试这个:
switch state {
case .RetrievingURL:
case .Stopped:
case .Buffering:
...
}
----编辑!!! ---- 强>
我错了,这是C ++枚举。所以试试这个:
switch state.value {
case kFsAudioStreamRetrievingURL.value:
case kFsAudioStreamStopped.value:
case kFsAudioStreamBuffering.value:
...
}
答案 1 :(得分:0)
在obj-c 枚举定义应为
typedef NS_ENUM(NSInteger, FSAudioStreamState){ FSAudioStreamStateStopped, ... }
所以当他们被导入Swift
时enum FSAudioStreamState{ case Stopped ... }
我认为它是C ++枚举(非Objective-C枚举),因此swift不会将其视为枚举,而使用if - else会更好。