Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 创建字典';在飞行中';在Swift中,使用自定义枚举作为值_Ios_Swift_Enums_Nsdictionary - Fatal编程技术网

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]
,然后在另一端重新构建它。