gpt4 book ai didi

objective-c - Swift 开关不适用于基于 C++ 的枚举

转载 作者:可可西里 更新时间:2023-10-31 23:44:30 27 4
gpt4 key购买 nike

我正在尝试通过转换我编写的现有 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com