gpt4 book ai didi

swift - 将 AnyObject 转换为 [MyEnum : String] dictionary

转载 作者:行者123 更新时间:2023-11-30 10:17:54 25 4
gpt4 key购买 nike

我有一个枚举定义为:

enum AlertInterfaceControllerKey {
case Title
case Content
}

我想在呈现 WKInterfaceController 时将其用作上下文,例如:

let alertData = [AlertInterfaceControllerKey.Title: "Title",
AlertInterfaceControllerKey.Content: "Content"]
presentControllerWithName("AlertInterfaceController", context: alertData)

并且,在AlertInterfaceController中:

override func awakeWithContext(context: AnyObject?) {
if let alertData = context as? [AlertInterfaceControllerKey: String] {
let title = data[AlertInterfaceControllerKey.Title]
let content = data[AlertInterfaceControllerKey.Content]
// ...
}
}

这里的错误是(在 if let 行):

 Type '[AlertInterfaceControllerKey : String]' does not conform to protocol 'AnyObject'

非常感谢任何帮助 - 甚至更好的方法来处理这个问题。

最佳答案

不幸的是,Swift 枚举值不是 NSObject,因此您不能将它们用作 NSDictionaries 中的键。它们可以是 Swift 字典中的键,但它们不会转换为 NSDictionary,因此会出现错误。

您可以为枚举指定一个类型并存储原始值:

enum AlertInterfaceControllerKey: String {
case Title = "TitleKey"
case Content = "ContentKey"
}

let alertData: AnyObject = [AlertInterfaceControllerKey.Title.rawValue: "Title"]

不太优雅,但可以让您弥合 API 中 Swift 和 Objective-C 类型之间的差距。这个解决方案实际上只是定义一些字符串常量的更好方法。

关于swift - 将 AnyObject 转换为 [MyEnum : String] dictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146632/

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