2014-12-13 19 views
1

我使用performSegueWithIdentifier:sender:方法,我想通过参数sender传递几个参数。在Objective-C中,我使用@{"myKey": myValue}语法创建了一个NSDictionary on-the-the-fly在Swift中使用自定义枚举“在运行中”创建字典作为值

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

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

编辑:这里是我的代码:

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

发布您的代码。 – zaph 2014-12-13 14:50:06

+0

Swift Dictionary不是一个对象,它是一个结构体。 – zaph 2014-12-13 14:50:59

+0

我同意但是您的建议是否可以执行我的操作? – 2014-12-13 15:02:00

回答

5

你的语法创建的元组的数组:

[("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?)必须被解开。

+0

我试过这种方式,我得到了错误:*'AnyObject!'没有名为'Key'的成员*。 'self.performSegueWithIdentifier(“backCameraVCtoFrontCameraVC”,sender:[“image”:image,“filter”:filter])' – 2014-12-13 15:10:05

+0

@sweepy_可能是因为你没有在接收端正确地投射它。 sender是一个id,它是Swift中的AnyObject,在尝试获取键的值之前,需要将其转换为字典。 – Abizern 2014-12-13 15:12:32

+0

@Abizern在上面提到的行上编译错误,而不是在接收端。 – 2014-12-13 15:18:45