【问题标题】:No output for map function in playground操场上的地图功能没有输出
【发布时间】:2015-04-21 18:35:45
【问题描述】:

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

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

friends.map{
    println("Hallo \($0)!")
}

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

是我还是 Xcode 中的错误?

【问题讨论】:

    标签: swift swift-playground


    【解决方案1】:

    这不是 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 返回Void,因此该表达式每次的结果都是Void。 Xcode 正在显示的是 Void(作为“(0 elements)”,这是 UI 显示 Void 的方式)。

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

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 2020-08-11
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多