Swift: print() vs println() vs NSLog(): 面向初学者的完整教程

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift: print() vs println() vs NSLog() — 如何选择以及为什么这很重要?

\n\n

每个开始学习 Swift 的人,迟早都会遇到向控制台输出数据的问题。看起来,这能有多复杂?但这里却出现了混淆:print()、println() 和 NSLog() — 它们有什么区别?为什么需要三种方式,而不能只保留一种?在本文中,我们将逐一梳理清楚,通过示例进行展示,并帮助您从此不再混淆这些函数。

\n\n

本主题基于 Stack Overflow 上一个真实的热门问题,该问题获得了数千次浏览。我们将其改编为教育内容,以便您不仅能死记硬背,更能理解 Swift 的逻辑。

\n\n
\n\n

简史:从 Objective-C 到现代 Swift

\n\n

要理解区别,需要稍微回顾一下历史。Swift 是一门年轻的语言(于 2014 年发布),但它是作为 Objective-C 的继承者而创建的。因此,它和谐地共存着“原生”的 Swift 函数和来自 Apple 世界的旧函数。

\n\n
    \n
  • println() — 来自最早 Swift 版本(2.0 版本之前)的残留物。如今它已被完全移除。
  • \n
  • print() — println() 的现代替代品,出现在 Swift 2.0 中。
  • \n
  • NSLog() — 来自 Objective-C 世界的函数,至今仍被广泛用于调试。
  • \n
\n\n

如果您使用现代 Swift(4.x 及更高版本)编写代码,您将不会再遇到 println() — 编译器只会报错。但在旧教程和论坛中,它仍然会出现,因此理解它是什么以及被什么替代很重要。

\n\n
\n\n

print() — 主要的输出工具

\n\n

print() 是如何工作的?

\n\n

从 Swift 2.0 开始,print() 成为向控制台输出数据的标准方式。它灵活、简单且完全可控。

\n\n
let name = "安娜"\nlet age = 25\n\nprint("你好,\\(name)!你 \\(age) 岁了。")\n// 输出:你好,安娜!你 25 岁了。
\n\n

与旧的 println() 的主要区别在于,print() 不会自动添加换行符。准确地说,它会添加,但您可以通过 terminator 参数来控制它。

\n\n
// 普通输出\nprint("第一行")\nprint("第二行")\n// 输出:\n// 第一行\n// 第二行\n\n// 不换行输出\nprint("第一行", terminator: "")\nprint("第二行", terminator: "")\n// 输出:第一行第二行
\n\n

print() 的参数

\n\n
    \n
  • items — 您要输出的内容(可以是多个值,用逗号分隔)。
  • \n
  • separator — 元素之间的分隔符(默认为空格)。
  • \n
  • terminator — 放在行尾的内容(默认为 \\n — 换行符)。
  • \n
\n\n
print(1, 2, 3, separator: "-", terminator: "!")\n// 输出:1-2-3!
\n\n

何时使用: 用于常规数据输出、简单应用程序中的日志记录以及教学示例。

\n\n
\n\n

println() — 来自过去的访客

\n\n

如果您在某些旧代码中遇到了 println(),请知道它是早期 Swift 版本中 print() 的对应物。唯一的区别是:println() 总是 在末尾添加一个换行符,并且它没有 terminator 参数。

\n\n
// Swift 1.x 的旧代码\nlet x = 10\nprintln("x 的值 = \\(x)")\n// 输出:x 的值 = 10(带换行)
\n\n

在现代 Swift 版本(从 2.0 开始)中,println() 已不复存在。如果您尝试使用它,将会收到编译错误。只需将其替换为 print() — 一切就会正常工作。

博客

书籍推荐