将 Optional(Set(["6", "14"])) 转换为 [String]
Convert Optional(Set(["6", "14"])) to [String]
我在尝试将 Set
转换为 [String]
时遇到问题。我正在使用 Eureka 表单并将我的值设置为:
let values = form.values()
这是一个 [String:Any]
.
我的领域是:
values["field_name"]
如果我使用以下内容,我将得到 nil:
var incidents : [String]?
if let incidentRow = values["field_name"]! {
incidents = incidentRow as? [String]
}
如果你真的有一个集合,正如输出 Optional(Set(["6", "14"]))
所暗示的那样,那么它就不是一个数组([String]
)。因此,您的测试 as? [String]
注定要失败,因此您得到 nil
。你不能 cast(使用 as
)一种类型的东西到它不是的另一种类型。
相反,您必须强制 从 Set 到 Array。这样做:
if let theSet = values["field_name"] as? Set<String> {
incidents = Array(theSet)
}
您可以使用 Optional.map(_:)
:
let incidents = values["field_name"].map(Array.init)
我在尝试将 Set
转换为 [String]
时遇到问题。我正在使用 Eureka 表单并将我的值设置为:
let values = form.values()
这是一个 [String:Any]
.
我的领域是:
values["field_name"]
如果我使用以下内容,我将得到 nil:
var incidents : [String]?
if let incidentRow = values["field_name"]! {
incidents = incidentRow as? [String]
}
如果你真的有一个集合,正如输出 Optional(Set(["6", "14"]))
所暗示的那样,那么它就不是一个数组([String]
)。因此,您的测试 as? [String]
注定要失败,因此您得到 nil
。你不能 cast(使用 as
)一种类型的东西到它不是的另一种类型。
相反,您必须强制 从 Set 到 Array。这样做:
if let theSet = values["field_name"] as? Set<String> {
incidents = Array(theSet)
}
您可以使用 Optional.map(_:)
:
let incidents = values["field_name"].map(Array.init)