Ios 创建字典';在飞行中';在Swift中,使用自定义枚举作为值
我正在使用Ios 创建字典';在飞行中';在Swift中,使用自定义枚举作为值,ios,swift,enums,nsdictionary,Ios,Swift,Enums,Nsdictionary,我正在使用performsguewithidentifier:sender:方法,我想通过sender参数传递几个参数。在Objective-C中,我正在使用@{“myKey”:myValue}语法动态创建NSDictionary 我在Swift中尝试了几种方法,但编译器总是给我一个类似的错误:“AnyObject?”没有名为{'Element'或'Key'的成员 如何在Swift中重现预期行为?谢谢 编辑:这是我的代码: self.stopCamera() dispatch_async(dis
performsguewithidentifier: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?
)筛选器。您的语法正在创建元组数组:
[("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?
)必须展开。Swift Dictionary不是一个对象,它是一个结构。我同意,但您对执行我的操作有什么建议?Swift Dictionary不是一个对象,这是一个结构。我同意,但你对我的操作有什么建议?我尝试了这种方法,但我得到了错误:“AnyObject!”没有名为“Key”的成员self.performsguewithidentifier(“backCameraVCtoFrontCameraVC”,发送方:[“image”:image,“filter”:filter])
@sweepy_uu可能是因为您没有在接收端正确地投射它。sender是一个id,它是Swift中的任意对象,在尝试获取键的值之前,您需要将其强制转换到字典中。@Abizern在上面提到的行上编译之前,而不是在接收端,会引发错误。image
和filter
是可选的吗?如果是这样的话,在你创建字典的时候把它们打开。这是你的问题。无法将枚举放入字典中,因为它不是任何对象
。您可以执行[“image”:image,“filter”:filter.rawValue]
然后在另一端重新构建它。我尝试了这种方法,但得到了错误:“AnyObject!”没有名为“Key”的成员self.performsguewithidentifier(“backCameraVCtoFrontCameraVC”,发送方:[“image”:image,“filter”:filter])
@sweepy_uu可能是因为您没有在接收端正确地投射它。sender是一个id,它是Swift中的任意对象,在尝试获取键的值之前,您需要将其强制转换到字典中。@Abizern在上面提到的行上编译之前,而不是在接收端,会引发错误。image
和filter
是可选的吗?如果是这样的话,在你创建字典的时候把它们打开。这是你的问题。无法将枚举放入字典中,因为它不是任何对象
。您可以执行[“image”:image,“filter”:filter.rawValue]
,然后在另一端重新构建它。