ios - 使用自定义枚举作为值在 Swift 中创建字典 'on-the-fly'

标签 ios swift enums nsdictionary

我正在使用 performSegueWithIdentifier:sender: 方法,我想通过 sender 参数传递几个参数。在 Objective-C 中,我使用 @{"myKey": myValue} 语法即时创建了一个 NSDictionary。

我在 Swift 中尝试了几种方法,但编译器总是给我这样的错误:'AnyObject?'没有名为 {'Element' 或 'Key'} 的成员

如何在 Swift 中重现预期的行为?谢谢!

编辑:这是我的代码:

self.stopCamera()
dispatch_async(dispatch_get_main_queue(), { () -> Void in
    self.performSegueWithIdentifier("backCameraVCtoFrontCameraVC", sender: [("image", image),  ("fitler", filter)])
})

最佳答案

您的语法正在创建一个元组数组:

[("image", image),  ("fitler", filter)]

你需要:

["image": image, "filter": filter]

如评论中所述,filter 是自定义枚举 WDFilterType。您不能将它放在 NSDictionary 中,因为 WDFilterType 不是 AnyObject。解决办法是把rawValue放到字典里,在另一端重构。

["image": image, "filter": filter.rawValue]

然后在接收端:

if let dict = sender as? NSDictionary {
    let filter = WDFilterType(rawValue: (dict["filter"] as Int))
}

在这种情况下,过滤器将是一个可选的 (WDFilterType?),必须展开。

关于ios - 使用自定义枚举作为值在 Swift 中创建字典 'on-the-fly',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27460028/

相关文章:

ios - 无法将 System.Net.Http 引用添加到 Xamarin.iOS 库项目

ios - NSFetchedResultsControllerDelegate 是如何工作的?

java - 如何对具有额外属性的 Java 枚举执行 Javadoc?

ios - 正则表达式不再工作(Swift 1.2)

c++ - 通过函数返回枚举

c# - 在枚举中使用静态

iOS:使用 MVC 实现 UITableView

ios - 如何在swift 3中解决 "ld: framework not found Alamofire"

swift - “弱”可能只适用于类和类绑定(bind)协议(protocol)类型,而不是 'ContentView' 我缺少什么?

uiview - 如何更改 UIView 大小?