将 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)