[英]What's the Enum value difference between 'k' and 'v' in Swift?
我今天刚刚更新了最新的Xcode,当我构建我的项目时,项目发生了错误。 像这样:
let playerStatus: BJYPlayerStatus = .playing // ambiguous use of 'playing'
枚举定义如下:
typedef NS_ENUM (NSInteger, BJVPlayerStatus) {
BJVPlayerStatus_playing,
// other cases...
BJVPlayerStatus_Playing DEPRECATED_MSG_ATTRIBUTE("use `BJVPlayerStatus_playing`") =
BJVPlayerStatus_playing
// other deprecated cases...
};
“玩”是模棱两可的。 我不知道如何写来区分这两个'.playing'。
感谢您的回答!
首先,回答标题中的问题。 “K”表示枚举案例(他们不使用“C”,因为它已经用于“类”)。 “V”表示一个var
(或let
),即一个属性。
Objective-C 枚举在 Swift 中得到这样的处理:
// This is not real Swift code, for illustrative purposes only
enum BJVPlayerStatus : Int {
// This was BJVPlayerStatus_playing
case playing
// ...
// This was BJVPlayerStatus_Playing
@available(*, deprecated, message: "use `BJVPlayerStatus_playing`")
var playing: BJVPlayerStatus {
return BJVPlayerStatus.playing // returns the *case* .playing
}
// ...
}
这里的要点是,已弃用的BJVPlayerStatus_Playing
中被视为计算属性,而不是枚举情况,因此是“V”。 这是因为你写
BJVPlayerStatus_Playing = BJVPlayerStatus_playing
在您的 Objective-C 代码中。
无论如何,大写和小写名称都转换为在 Swift 中playing
,这会导致冲突。 您需要:
对 Swift 和 Objective-C 代码使用单独的 header 文件,因此 ZAE832E9B5BDA2699DB45F3FA6AA8 不建议使用
使用NS_SWIFT_NAME
将已弃用案例的Swift 名称重命名为其他名称。
BJVPlayerStatus_Playing NS_SWIFT_NAME(deprecatedPlaying) DEPRECATED_MSG_ATTRIBUTE("use `BJVPlayerStatus_playing`") = BJVPlayerStatus_playing
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.