从swift 3迁移到swift 4 - 无法将String转换为期望的String.Element

Nev*_*vin 7 swift swift3 swift4

我将我的代码从swift 3转换为swift 4并在以下代码中获取此错误.即使我尝试使用flatmap来展平数组,我也会得到这个

无法将'String'类型的值转换为预期的参数类型'String.Element'(又名'Character')

if favoritedProducts.contains("helloWorld") {}
Run Code Online (Sandbox Code Playgroud)

下面的代码行不返回[String]而是返回'[String.Element]'如何将其转换为[String].如果我尝试将其转换为[String],它会说它总会失败.

let productIDs = allItems.flatMap{$0.productID}
Run Code Online (Sandbox Code Playgroud)

Luc*_*tti 5

如果您的Item类型具有类似这样的非可选 productID属性String

struct Item {
    let productID: String
}
Run Code Online (Sandbox Code Playgroud)

你有一系列Item

let allItems: [Item] = ...
Run Code Online (Sandbox Code Playgroud)

productID(s)然后你可以使用该map方法获取一个数组

let productIDs = allItems.map { $0.productID }
Run Code Online (Sandbox Code Playgroud)

现在productIDs[String]

  • 惊人的。问题是当我只需要使用地图时我正在使用平面图。在 swift 3 中这个错误是可以的,但在 swift 4 中它不起作用,因为我相信字符串现在是字符数组。 (2认同)