作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试通过转换我编写的现有 Objective-C 应用程序(流式音频播放器)来学习 Swift。但是,我使用的库没有 Swift 等价物,所以我创建了一个桥接 header 并成功引用了它们。
现在,我正在尝试对这些库之一的 enum
进行切换,但 Swift 只是提示。
为了让事情变得更加困惑(对我来说,可能对你们任何人都不是),一系列 if
block 可以正常工作。
这是来自 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,我将不胜感激!
最佳答案
试试这个:
switch state {
case .RetrievingURL:
case .Stopped:
case .Buffering:
...
}
---- 已编辑!!! ----
我错了,这是 C++ 枚举。所以试试这个:
switch state.value {
case kFsAudioStreamRetrievingURL.value:
case kFsAudioStreamStopped.value:
case kFsAudioStreamBuffering.value:
...
关于objective-c - Swift 开关不适用于基于 C++ 的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33009506/
我是一名优秀的程序员,十分优秀!