将Array.map与Dictionary一起应用

时间:2019-06-25 09:13:48

标签: arrays swift dictionary

如何在Swift 4.2中正确编写以下代码:

let navStack = ["root", "page1", "page3"]
let route = ["root", "page1", "page2", "page3"]
let routeTags =
[
    "root": ["root"],
    "page1": ["page1", "page2"],
    "page3": ["page3"]
]
let r = navStack.map({ routeTags[$0] }).joined(separator: "/")

当前代码无法编译(对成员“下标”的引用不明确)。该代码应产生一个字符串,该字典的字典值根据navStack中的键进行映射。

1 个答案:

答案 0 :(得分:1)

两个问题:

  1. routeTags[$0]的结果是可选的,必须解包(使用compactMap安全地包装)。
  2. joined表达式必须移入,因为第二项是数组。

let navStack = ["root", "page1", "page3"]
let route = ["root", "page1", "page2", "page3"]
let routeTags =
    [
        "root": ["root"],
        "page1": ["page1", "page2"],
        "page3": ["page3"]
]
let r = navStack.compactMap{ routeTags[$0]?.joined(separator: "/") }

或者,如果您需要一个字符串,则必须两次使用joined

let r = navStack.compactMap{ routeTags[$0]?.joined(separator: "/") }.joined(separator: "/")