6 min read

When Apple introduced Swift at WWDC (its annual Worldwide Developers Conference) in 2014, it had a few goals for the new language. Among them was being easy to learn, especially compared to other compiled languages. The following is quoted from Apple’s The Swift Programming Language:

Swift is friendly to new programmers. It is the first industrial-quality systems programming language that is as expressive and enjoyable as a scripting language.

The REPL

Swift’s playgrounds embody that friendliness by modernizing the concept of a REPL (Read-Eval-Print Loop, pronounced “repple”). Introduced by the LISP language, and now a common feature of many modern scripting languages, REPLs allow you to quickly and interactively build up your code, one line at a time. A post on the Swift Blog gives an overview of the Swift REPL’s features, but this is what using it looks like (to launch it, enter swift in Terminal, if you have Xcode already installed):

Welcome to Apple Swift version 2.2 (swiftlang-703.0.18.1 clang-703.0.29). Type :help for assistance.
  1> "Hello world"
$R0: String = "Hello World"
  2> let a = 1
a: Int = 1
  3> let b = 2
b: Int = 2
  4> a + b
$R1: Int = 3
  5> func aPlusB() {
  6.     print("(a + b)")
  7. }
  8> aPlusB()
3

If you look at what’s there, each line containing input you give has a small indentation. A line that starts a new command begins with the line number, followed by > (1, 2, 3, 4, 5, and 8), and each subsequent line for a given command begins with the line number, followed by  (6 and 7). These help to keep you oriented as you enter your code one line at a time.

While it’s certainly possible to work on more complicated code this way, it requires the programmer to keep more state about the code in his head, and it limits the output to data types that can be represented in text only.

Playgrounds

Playgrounds take the concept of a REPL to the next level by allowing you to see all of your code in a single editable code window, and giving you richer options to visualize your data.

To get started with a Swift playground, launch Xcode, and select File > New > Playground… (⌥⇧⌘N) to create a new playground. In the following, you can see a new playground with the same code entered into the previous  REPL:

 

The results are shown in the gray area on the right-hand side of the window update as you type, which allows for rapid iteration. You can write standalone functions, classes, or whatever level of abstraction you wish to work in for the task at hand, removing barriers that prevent the expression of your ideas, or experimentation with the language and APIs.

So, what types of goals can you accomplish?

Experimentation with the language and APIs

Playgrounds are an excellent place to learn about Swift, whether you’re new to the language, or new to programming. You don’t need to worry about main(), app bundles, simulators, or any of the other things that go into making a full-blown app. Or, if you hear about a new framework and would like to try it out, you can import it into your playground and get your hands dirty with minimal effort. Crucially, it also blows away the typical code-build-run-quit-repeat cycle that can often take up so much development time.

Providing living documentation or code samples

Playgrounds provide a rich experience to allow users to try out concepts they’re learning, whether they’re reading a technical article, or learning to use a framework. Aside from interactivity, playgrounds provide a whole other type of richness: built-in formatting via Markdown, which you can sprinkle in your playground as easily as writing comments.

This allows some interesting options such as describing exercises for students to complete or providing sample code that runs without any action required of the user. Swift blog posts have included playgrounds to experiment with, as does the Swift Programming Language’s A Swift Tour chapter. To author Markdown in your playground, start a comment block with /*:. Then, to see the comment rendered, click on Editor > Show Rendered Markup. There are some unique features available, such as marking page boundaries and adding fields that populate the built-in help Xcode shows. You can learn more at Apple’s Markup Formatting Reference page.

Designing code or UI

You can also use playgrounds to interactively visualize how your code functions. There are a few ways to see what your code is doing:

  • Individual results are shown in the gray side panel and can be Quick-Looked (including your own custom objects that implement debugQuickLookObject()).
  • Individual or looped values can be pinned to show inline with your code. A line inside a loop will read “(10 times),” with a little circle you can toggle to pin it. For instance, you can show how a value changes with each iteration, or how a view looks:
  • Using some custom APIs provided in the XCPlayground module, you can show live UIViews and captured values. Just import XCPlayground and set the XCPlayground.currentPage.liveView to a UIView instance, or call XCPlayground.currentPage.captureValue(someValue, withIdentifier: “My label”) to fill the Assistant view.
  • You also still have Xcode’s console available to you for when debugging is best served by printing values and keeping scrolled to the bottom. As with any Swift code, you can write to the console with NSLog and print.

Working with resources

Playgrounds can also include resources for your code to use, such as images:

A .playground file is an OS X package (a folder presented to the user as a file), which contains two subfolders: Sources and Resources. To view these folders in Xcode, show the Project Navigator in Xcode’s left sidebar, the same as for a regular project. You can then drag in any resources to the Resources folder, and they’ll be exposed to your playground code the same as resources are in an app bundle. You can refer to them like so:

let spriteImage = UIImage(named:"sprite.png")

Xcode versions starting with 7.1 even support image literals, meaning you can drag a Resources image into your source code and treat it as a UIImage instance. It’s a neat idea, but makes for some strange-looking code. It’s more useful for UIColors, which allow you to use a color-picker. The Swift blog post goes into more detail on how image, color, and file literals work in playgrounds:

Wrap-up

Hopefully this has opened your eyes to the opportunities afforded by playgrounds. They can be useful in different ways to developers of various skill and experience levels (in Swift, or in general) when learning new things or working on solving a given problem. They allow you to iterate more quickly, and visualize how your code operates more easily than other debugging methods.

About the author

Dov Frankel (pronounced as in “he dove swiftly into the shallow pool”) works on Windows in-house software at a Connecticut hedge fund by day, and independent Mac and iOS apps by night. Find his digital comic reader, on the Mac App Store, and his iPhone app Afterglo is in the iOS App Store. He blogs when the mood strikes him, at dovfrankel.com; he’s @DovFrankel on Twitter, and @abbeycode on GitHub.

LEAVE A REPLY

Please enter your comment!
Please enter your name here