操场上没有地图功能的输出
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
的值未被使用不应被解释为结果,而应被解释为输出到的内容标准输出,这就是它的作用。
我有这些非常简单的代码行:
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
的值未被使用不应被解释为结果,而应被解释为输出到的内容标准输出,这就是它的作用。