【发布时间】:2012-10-04 14:24:15
【问题描述】:
我有一个 MPMoviePlayerController 实例。我希望检查它的playbackState 属性以获取多个值之一。因此,我会这样做:
if (moviePlayer.playbackState == (MPMoviePlaybackStateStopped ||
MPMoviePlaybackStatePlaying ||
MPMoviePlaybackStatePaused)) {
// ...
// Perform some logic
// ...
}
这按预期工作,但会导致编译器警告:
使用逻辑“||”使用常量操作数。
编译器的解决方法是改用按位| 运算符。在 Stack Overflow 上搜索你会发现 couple 的 answers 暗示了同样的事情。 但是使用按位 OR 真的不是我需要的。
MPMoviePlaybackState 在 MPMoviePlayerController.h 中声明:
enum {
MPMoviePlaybackStateStopped,
MPMoviePlaybackStatePlaying,
MPMoviePlaybackStatePaused,
MPMoviePlaybackStateInterrupted,
MPMoviePlaybackStateSeekingForward,
MPMoviePlaybackStateSeekingBackward
};
typedef NSInteger MPMoviePlaybackState;
这不是位掩码(而且它也没有多大意义——枚举值是互斥模式,而不是要组合的标志)。我真的很想使用符合逻辑的||。
(在我的特定情况下,基础值为 0,1,2,按位示例可能有效,但这只是巧合。)
我应该如何改写以避免警告或者我可以使用什么 #pragma clang diagnostic ignored ... 来消除警告?
(指向所有此类诊断列表的奖励积分 - 我似乎无法在手册中找到一个。)
提前致谢!
【问题讨论】:
标签: objective-c mpmovieplayercontroller clang