我将枚举定义为:
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'
非常感谢任何帮助 - 甚至更好的方法来处理这个问题。
答案 0 :(得分:1)
不幸的是,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类型之间的差距。这个解决方案实际上只是定义一些字符串常量的更好方法。