操场上没有地图功能的输出

No output for map function in playground

我有这些非常简单的代码行:

var friends = ["Mike", "Marika", "Andreas", "Peter", "Sabine"]

friends.map{
    println("Hallo \([=10=])!")
}

这在程序中运行良好,但我在 playground 中没有输出。 它只告诉我元素的数量以及函数需要运行 的次数。但它不写入字符串。

是我的问题还是 Xcode 中的错误?

这不是 Xcode 中的错误。虽然您的 map 代码将打印到标准输出(点击 cmd-opt-enter 以在右侧的助理编辑器中显示输出),但在风格上您应该避免为此使用 map。使用 for...in 循环会更好:

for friend in friends {
    println("Hallo \(friend)")
}

如果这次快速查看结果,您会看到更有帮助的结果:

(注意,我已将快速查看切换到列表视图,它显示每个结果,而不仅仅是最后一个)

为什么工作方式不同?这是因为 map 并不是真正针对数组的 运行 任意代码。它更具体地用于 转换 (即映射)您的数组到另一个数组。所以假设你想要一个问候列表而不是打印朋友列表,你可以这样做:

let greetings = friends.map { friend in
    "Hallo \(friend)"
}

greetings 现在将设置为一个包含 5 个字符串的新数组,每个名称一个,格式为 "Hallo <name>"map 正在采取一个接受字符串并将其映射到新字符串的闭包。

所以当你写 friends.map { println("...") } 时发生的是 map 正在调用闭包,并在闭包中获取表达式的结果,并用它填充一个新数组。由于 println returns Void,所以每次该表达式的结果都是 Void。 Xcode 显示的是 Void(如“(0 elements)”,这就是 UI 显示 Void 的方式)。

相反,通过 for 循环,Xcode 知道一个独立 println 的值未被使用不应被解释为结果,而应被解释为输出到的内容标准输出,这就是它的作用。