Pure Programmer
Blue Matrix


Cluster Map

Console Output

Every program, every function, everything we do when we program consists of three fundamental operations: input, processing and output. This pattern of accepting input, doing some sort of processing action, then emitting output is at the heart of writing programs. Once you master these ideas, you will be able to construct many types of programs from console utilities, to background daemons to [[GUI]] (Graphical User Interface) programs.

The first of these that we will explore is output. For console-type programs, output consists of a stream of characters that are displayed on the console. In Swift our programs automatically have access to the standard output stream ([[stdout]]) which is represented by the symbol stdout?. We can send characters and strings of characters to stdout? to cause them to appear on the console. This is done using the print function.

ConsoleOutput1.swift
#!/usr/bin/env swift

import Foundation

print("H")
print("e")
print("l")
print("l")
print("o")

exit(EXIT_SUCCESS)
Output
$ swiftc ConsoleOutput1.swift -I . -L . -lUtils error: link command failed with exit code 1 (use -v to see invocation) ld: library not found for -lUtils clang: error: linker command failed with exit code 1 (use -v to see invocation)

Starting with our boilerplate code for a console Swift program, we then change the code after the first comment. Note that programming statements in Swift are written one per line but multiple statements can be put on a line if separated with a semicolon.

In the above example we have five statements each using the print function to send a individual characters to the console (stdout?). Each call to print appends the newline character to begin a new line. Each of the characters are wrapped in double quotes which the ways Swift represents character literals. To suppress the newline we must add the named argument terminator: "" to the print call as illustrated below.

ConsoleOutput1b.swift
#!/usr/bin/env swift

import Foundation

print("H", terminator: "")
print("e", terminator: "")
print("l", terminator: "")
print("l", terminator: "")
print("o")

exit(EXIT_SUCCESS)
Output
$ swiftc ConsoleOutput1b.swift -I . -L . -lUtils error: link command failed with exit code 1 (use -v to see invocation) ld: library not found for -lUtils clang: error: linker command failed with exit code 1 (use -v to see invocation)

We can actually print out multiple items per print by supplying a comma separated list of arguments to print. When printing multiple arguments, the print function places a space between each item as seen below.

ConsoleOutput1c.swift
#!/usr/bin/env swift

import Foundation

print("H","e","l","l","o")

exit(EXIT_SUCCESS)
Output
$ swiftc ConsoleOutput1c.swift -I . -L . -lUtils error: link command failed with exit code 1 (use -v to see invocation) ld: library not found for -lUtils clang: error: linker command failed with exit code 1 (use -v to see invocation)

The end-of-line character is not universal across different types of computers. Text output (and text files) on Unix/Linux systems use the [[ASCII]] line feed character (LF is value 10) to mark the end of a line. Macintosh OS X text uses the ASCII carriage return character (CR is value 13) as the end-of-line character. DOS/Windows systems use the CR LF character pair to signify end-of-line. Output to the standard output in Swift is smart enough to use the correct end-of-line character(s) for the operating system on which our program is running when we use the print function in our code.

Run

To try out the program above, copy and paste the source into your programming text editor, then save it in a file called "Hello.swift". To organize your work, it is easiest to create a folder on your desktop to hold your source files. For our purposes we will assume that you name this folder "tutorial". After saving your source file, bring up the command-line terminal and execute the commands illustrated below.

$ cd Desktop $ cd tutorial $ swift hello.swift H e l l o $

The cd commands cause the current directory (cd) to be changed. Since in a new terminal we start with the current directory set to your own home directory, we change once to the "Desktop" directory, then again into the "tutorial" directory. The next command launches the Swift interpreter to run source file. If all goes well you will see the five characters "Hello" printed on the console. If the run command prints out error messages, take note of the error and line number and then correct your source file. Then you can try the process again.

String Output

While on a fundamental level all output is done one character at a time, it can be rather inconvenient to write code that outputs one character at a time. To make things easier, we can also output a sequence of characters known as a string. Like a single character literal that can be written inside double quotes, a sequence of characters or string can also be written inside a pair of double quotes. The following program performs the same output as the program above but uses a string literal instead.

ConsoleOutput2.swift
#!/usr/bin/env swift

import Foundation

print("Hello, world!")

exit(EXIT_SUCCESS)
Output
$ swiftc ConsoleOutput2.swift -I . -L . -lUtils error: link command failed with exit code 1 (use -v to see invocation) ld: library not found for -lUtils clang: error: linker command failed with exit code 1 (use -v to see invocation)
Common Escape Sequences
CharacterEscape
Sequence
'\'
"\"
\\\
tab\t
linefeed\n
carriage return\r
backspace\b
any char\u{####}

Special Characters

While we can represent most of the printable characters inside character or string literals using the character itself, there are some exceptions: single quote, double quote and the control characters. These exceptions can, however, be embedded into our literals by using a special escape notation. The escape notation consists of the backslash followed by another character. See the table to the right for the most common escape sequences.

It turns out that any character can be printed using an escape sequence if needed. The escape sequence \u{####} can be used to represent any character as long as you know the [[hexadecimal]] value for that character. Just replace the #'s with the corresponding hexadecimal value and you have the escape sequence for any character.

Questions

Projects

More ★'s indicate higher difficulty level.

Windows command line terminal does not support [[Unicode]] characters so some programs will not display Unicode characters correctly. If you redirect the program output to a file then open it in a Unicode aware text editor you should see the correct output. For example: C:> swift Output6.swift > temp.txt But if you use [[Cygwin]], the default terminal program mintty supports Unicode so this is not necessary.

References