Swift Essentials
()
About this ebook
Swift is a new and powerful programming language that represents an essential new programming tool for iOS and OSX applications and builds upon the power of Objective-C while streamlining the developer experience.
Swift Essentials is a fast-paced, practical guide showing you the quickest way to put Swift to work in the real world. It guides you concisely through the basics of syntax and development before pushing ahead to explore Swift's higher features through practical programming projects.
By the end of the book, you will be able to use Xcode's graphical interface builder, create interactive applications, and communicate with network services.
Read more from Dr Alex Blewitt
Mastering Eclipse Plug-in Development Rating: 0 out of 5 stars0 ratingsEclipse Plug-in Development: Beginner's Guide - Second Edition Rating: 0 out of 5 stars0 ratings
Related to Swift Essentials
Related ebooks
Learning Swift Rating: 5 out of 5 stars5/5Swift by Example Rating: 1 out of 5 stars1/5Swift Functional Programming - Second Edition Rating: 3 out of 5 stars3/5iOS 13 Programming for Beginners - Fourth Edition: Get started with building iOS apps with Swift 5 and Xcode 11, 4th Edition Rating: 0 out of 5 stars0 ratingsApplication Development with Swift Rating: 0 out of 5 stars0 ratingsSwift Essentials - Second Edition Rating: 0 out of 5 stars0 ratingsLearning Swift - Second Edition Rating: 0 out of 5 stars0 ratingsSwift Data Structure and Algorithms Rating: 0 out of 5 stars0 ratingsMastering Android Application Development Rating: 5 out of 5 stars5/5Getting Started with React Native Rating: 4 out of 5 stars4/5JavaScript Unlocked Rating: 5 out of 5 stars5/5Swift 2 Design Patterns Rating: 0 out of 5 stars0 ratingsLearning Node.js for Mobile Application Development Rating: 0 out of 5 stars0 ratingsReact and Libraries: Your Complete Guide to the React Ecosystem Rating: 0 out of 5 stars0 ratingsMastering Reactive JavaScript Rating: 0 out of 5 stars0 ratingsUnity 5 for Android Essentials Rating: 4 out of 5 stars4/5Mastering macOS Programming Rating: 0 out of 5 stars0 ratingsTypeScript Essentials Rating: 4 out of 5 stars4/5JavaScript Projects for Kids Rating: 0 out of 5 stars0 ratingsVisual Studio Condensed: For Visual Studio 2013 Express, Professional, Premium and Ultimate Editions Rating: 0 out of 5 stars0 ratingsMastering Windows Presentation Foundation Rating: 4 out of 5 stars4/5Modular Programming with PHP 7 Rating: 0 out of 5 stars0 ratingsSwift Programming Nuts and bolts Rating: 0 out of 5 stars0 ratingsiOS 15 Application Development for Beginners: Learn Swift Programming and Build iPhone Apps with SwiftUI and Xcode 13 Rating: 0 out of 5 stars0 ratingsSwift Cookbook Rating: 5 out of 5 stars5/5iOS Development with SwiftUI: Acquire the Knowledge and Skills to Create iOS Applications Using SwiftUI, Xcode 13, and UIKit Rating: 0 out of 5 stars0 ratingsProgramming with Swift 4.2: Building iOS Apps with Swift, #1 Rating: 0 out of 5 stars0 ratingsHello Swift!: iOS app programming for kids and other beginners Rating: 0 out of 5 stars0 ratingsLearning iOS UI Development Rating: 0 out of 5 stars0 ratings
Programming For You
Python: Learn Python in 24 Hours Rating: 4 out of 5 stars4/5Java for Beginners: A Crash Course to Learn Java Programming in 1 Week Rating: 5 out of 5 stars5/5Excel : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Excel Programming: 1 Rating: 5 out of 5 stars5/5HTML & CSS: Learn the Fundaments in 7 Days Rating: 4 out of 5 stars4/5Coding All-in-One For Dummies Rating: 4 out of 5 stars4/5Python: For Beginners A Crash Course Guide To Learn Python in 1 Week Rating: 4 out of 5 stars4/5SQL: For Beginners: Your Guide To Easily Learn SQL Programming in 7 Days Rating: 5 out of 5 stars5/5SQL All-in-One For Dummies Rating: 3 out of 5 stars3/5Learn SQL in 24 Hours Rating: 5 out of 5 stars5/5Python Programming : How to Code Python Fast In Just 24 Hours With 7 Simple Steps Rating: 4 out of 5 stars4/5Learn JavaScript in 24 Hours Rating: 3 out of 5 stars3/5Grokking Algorithms: An illustrated guide for programmers and other curious people Rating: 4 out of 5 stars4/5Python Machine Learning By Example Rating: 4 out of 5 stars4/5SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5TensorFlow in 1 Day: Make your own Neural Network Rating: 4 out of 5 stars4/5PYTHON: Practical Python Programming For Beginners & Experts With Hands-on Project Rating: 5 out of 5 stars5/5Photoshop For Beginners: Learn Adobe Photoshop cs5 Basics With Tutorials Rating: 0 out of 5 stars0 ratingsModern C++ for Absolute Beginners: A Friendly Introduction to C++ Programming Language and C++11 to C++20 Standards Rating: 0 out of 5 stars0 ratingsPython QuickStart Guide: The Simplified Beginner's Guide to Python Programming Using Hands-On Projects and Real-World Applications Rating: 0 out of 5 stars0 ratingsHTML in 30 Pages Rating: 5 out of 5 stars5/5Programming Arduino: Getting Started with Sketches Rating: 4 out of 5 stars4/5Learn to Code. Get a Job. The Ultimate Guide to Learning and Getting Hired as a Developer. Rating: 5 out of 5 stars5/5Mastering Windows PowerShell Scripting Rating: 4 out of 5 stars4/5Python Essentials Rating: 5 out of 5 stars5/5
Reviews for Swift Essentials
0 ratings0 reviews
Book preview
Swift Essentials - Dr Alex Blewitt
Table of Contents
Swift Essentials
Credits
About the Author
Acknowledgments
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why subscribe?
Free access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Trademarks
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Exploring Swift
Getting started with Swift
Numeric literals
Floating point literals
String literals
Variables and constants
Collection types
Optional types
Nil coalescing operator
Conditional logic
If statements
Switch statements
Iteration
Iterating over keys and values in a dictionary
Iteration with for loops
Break and continue
Functions
Named arguments
Optional arguments and default values
Anonymous arguments
Multiple return values and arguments
Returning structured values
Command-line Swift
Interpreted Swift scripts
Compiled Swift scripts
Summary
2. Playing with Swift
Getting started with playgrounds
Creating a playground
Viewing the console output
Viewing the timeline
Displaying objects with QuickLook
Showing colored labels
Showing images
Advanced techniques
Capturing values explicitly
Running asynchronous code
Playgrounds and documentation
Learning with playgrounds
Understanding the playground format
Adding a new documentation section
Styling the documentation
Adding resources to a playground
Additional entries in the header
Generating playgrounds automatically
Markdown
AsciiDoc
Limitations of playgrounds
Summary
3. Creating an iOS Swift App
Understanding iOS applications
Creating a single view iOS application
Removing the storyboard
Setting up the view controller
Swift classes, protocols, and enums
Classes in Swift
Subclasses and testing in Swift
Protocols in Swift
Enums in Swift
Raw values
Associated values
Creating a master-detail iOS application
The AppDelegate class
The MasterViewController class
The DetailViewController class
Summary
4. Storyboard Applications with Swift and iOS
Storyboards, scenes, and segues
Creating a storyboard project
Scenes and view controllers
Adding views to the scene
Segues
Adding a navigation controller
Naming scenes and views
Swift and storyboards
Custom view controllers
Connecting views to outlets in Swift
Calling actions from interface builder
Triggering a segue with code
Passing data with segues
Using Auto Layout
Understanding constraints
Adding constraints
Adding a constraint with the drag and drop method
Adding constraints to the Press Me scene
Adding missing constraints
Summary
5. Creating Custom Views in Swift
An overview of UIView
Creating new views with interface builder
Creating a table view controller
Showing data in the table
Defining a view in a XIB file
Wiring a custom view class
Dealing with intrinsic size
Creating views by subclassing UIView
Auto Layout and custom views
Constraints and the visual format language
Adding the custom view to the table
Custom graphics with drawRect
Drawing graphics in drawRect
Responding to orientation changes
Custom graphics with layers
Creating a ProgressView from layers
Adding the stop square
Adding a progress bar
Clipping the view
Testing views in Xcode
Responding to change
Summary
6. Parsing Networked Data
Loading data from URLs
Dealing with errors
Dealing with missing content
Nested if and switch statements
Networking and user interfaces
Running functions on the main thread
Parsing JSON
Handling errors
Parsing XML
Creating a parser delegate
Downloading the data
Parsing the data
Direct network connections
Opening a stream connection
Synchronous reading and writing
Writing data to an NSOutputStream
Reading from an NSInputStream
Reading and writing hexadecimal and UTF8 data
Implementing the git protocol
Listing git references remotely
Integrating the network call into the UI
Asynchronous reading and writing
Reading data asynchronously from an NSInputStream
Creating a stream delegate
Dealing with errors
Listing references asynchronously
Displaying asynchronous references in the UI
Writing data asynchronously to an NSOutputStream
Summary
7. Building a Repository Browser
An overview of the GitHub API
The root endpoint
The user resource
The repositories resource
The RepositoryBrowser project
URI templates
Background threading
Parsing JSON dictionaries
Parsing JSON arrays of dictionaries
Creating the client
Talking to the GitHub API
Returning repositories for a user
Accessing data through the AppDelegate
Accessing repositories from view controllers
Adding users
Implementing the detail view
Transitioning between the master and detail views
Loading the user's avatar
Displaying the user's avatar
Summary
A. Appendix
Language
Twitter users
Blogs and tutorial sites
Meetups
Afterword
Index
Swift Essentials
Swift Essentials
Copyright © 2014 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: December 2014
Production reference: 1201214
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78439-670-1
www.packtpub.com
Credits
Author
Dr Alex Blewitt
Reviewers
Nate Cook
Arvid Gerstmann
James Robert
Anil Varghese
Commissioning Editor
Sarah Crofton
Acquisition Editor
Sam Wood
Content Development Editor
Arwa Manasawala
Technical Editor
Faisal Siddiqui
Copy Editors
Dipti Kapadia
Shambhavi Pai
Project Coordinator
Danuta Jones
Proofreaders
Simran Bhogal
Ameesha Green
Paul Hindle
Indexer
Rekha Nair
Production Coordinator
Alwin Roy
Cover Work
Alwin Roy
About the Author
Dr Alex Blewitt has over 20 years of experience in Objective-C and has been using Apple frameworks since NeXTSTEP 3.0. He upgraded his NeXTstation for a TiBook when Apple released Mac OS X in 2001 and has been developing on it ever since.
Alex currently works for a financial company in London and writes for the online technology news site InfoQ. He has authored two other books for Packt Publishing. He also has a number of apps on the App Store through Bandlem Limited. When he's not working on technology and the weather is nice, he likes to go flying from the nearby Cranfield airport.
Alex writes regularly on his blog http://alblue.bandlem.com as well tweets regularly on Twitter, @alblue.
Acknowledgments
This book would not have been possible without the ongoing love and support of my wife, Amy, who has helped me through the highs and lows of life. She gave me the freedom to work during the many late nights and weekends that it takes to produce a book and its associated code repository. She truly is the gem of my life.
I'd also like to thank my parents, Ann and Derek, for their encouragement and support during my formative years. It was their work ethics that allowed me to start my career in technology as a teenager and to incorporate my first company before I was 25. I'd also like to congratulate them on their 50th wedding anniversary in 2015, and I look forward to reaching this milestone with Amy.
Thanks is due especially to the reviewers of the book, Nate Cook, James Robert, Arvid Gerstmann, and Anil Varghese, who provided excellent feedback on the contents of this book during development and caught many errors in both the text and code. Any remaining errors are my own.
I'd also like to thank CodeClub, with whom I have been volunteering to teach young children how to code, and Akeley Wood, for allowing me to be a part of it. I hope both Sam and Holly enjoy it as much as I do.
Finally, I'd like to thank Ben Moseley and Eren Kotan who introduced me to NeXT in the first place and set my career going on a twenty-year journey to this book.
About the Reviewers
Nate Cook is an independent web and application developer who works on projects of all sizes, from websites and blogs for non profit organizations to customized Enterprise applications for Fortune 500 companies. He frequently writes about topics in Swift at http://www.natecook.com/blog.
Arvid Gerstmann is a 20-year-old software developer with a strong interest in mobile platforms and game development. He started experimenting with software development around 2006 and is one of the early adopters of the mobile age. Currently, he lives in Hamburg, Germany, and works as a lead developer in a company focused on mobile applications and games.
You can find him at http://arvid-gerstmann.de.
James Robert is a technologist who follows his curiosity. He's the CTO of Media Predict and a maintainer of several open source projects, including Pydub, which is an open source audio processing library. He's also the cohost of the Biz vs Dev podcast and writes about technology under the moniker jiaaro.
Anil Varghese is an enthusiastic software engineer from Kerala, India, who is currently focusing on iOS application development. He is constantly striving to learn new technologies and learn better and faster ways to solve problems. He is keenly looking forward to working with the future of iOS, Swift. He always finds time to help fellow programmers and is an active member of developer communities, such as Stack Overflow (http://stackoverflow.com/users/2021193/anil).
You can contact him at <anilvarghese@icloud.com>.
www.PacktPub.com
Support files, eBooks, discount offers, and more
For support files and downloads related to your book, please visit www.PacktPub.com.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Free access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
Preface
Swift Essentials provides an overview of the Swift language and the tooling necessary to write iOS applications. From simple Swift commands on the command line to interactively testing graphical content in the Playground editor, the Swift language and syntax is introduced by examples.
The book also introduces end-to-end iOS application development by showing you how a simple iOS application can be created, followed by how to use storyboards and custom views to build a more complex networked application.
The book concludes by providing a worked example from scratch that builds up a GitHub repository browser.
What this book covers
Chapter 1, Exploring Swift, presents the Swift read-evaluate-print-loop (REPL) and introduces the Swift language through examples on standard data types, functions, and looping.
Chapter 2, Playing with Swift, demonstrates Swift Playgrounds as a means to interactively play with the Swift code and obtain graphical results. It also introduces the playground format and shows how playgrounds can be created automatically from Markdown and AsciiDoc files.
Chapter 3, Creating an iOS Swift App, shows you how to create and test an iOS application built in Swift using Xcode, along with an overview of the Swift classes, protocols, and enums.
Chapter 4, Storyboard Applications with Swift and iOS, introduces the concept of Storyboards as a means to create a multiscreen iOS application and shows how views in Interface Builder can be wired to Swift outlets and actions.
Chapter 5, Creating Custom Views in Swift, covers custom views in Swift using custom table views, laying out nested views, drawing custom graphics, and layered animations.
Chapter 6, Parsing Networked Data, demonstrates how Swift can talk to networked services, using both HTTP and custom stream-based protocols.
Chapter 7, Building a Repository Browser, uses the techniques described in this book to build a repository browser that can display information about users' GitHub repositories.
Appendix provides additional references and resources to continue learning about Swift.
What you need for this book
The exercises in this book are written and tested for Swift 1.1, which is bundled with Xcode 6.1. To run the exercises, you need to have a Mac OS X computer running 10.9 or above with Xcode 6.1 or higher. If newer versions of Swift are released, check the book's GitHub repository or the book's errata page at PacktPub for details about any changes that might affect the book's content.
Xcode can be installed via the App Store as a free download; search for Xcode in the search box. Alternatively, Xcode can be downloaded from https://developer.apple.com/xcode/downloads/, which is referenced from the iOS Developer Center at https://developer.apple.com/devcenter/ios/.
Once Xcode is installed, it can be launched from /Applications/Xcode.app or from Finder. To run the command-line based exercises, Terminal can be launched from /Applications/Utilities/Terminal.app, and if Xcode is installed successfully, Swift can be launched by running xcrun swift.
The iOS applications can be developed and tested in the iOS simulator that comes bundled with Xcode. It is not necessary to have an iOS device to write or test code. However, if you want to run the code on an iOS device, then you need to join the iOS developer program. More information is available at https://developer.apple.com/programs/ios/.
Who this book is for
This book is aimed at developers who are interested in learning the Swift programming language and how to write iOS applications using Swift. No prior programming experience for iOS is assumed, although a basic level of programming experience in a dynamically or statically typed programming language is expected. It is assumed that you are familiar with navigating and using Mac OS X and in the cases where Terminal commands are required, you have experience of simple shell commands or can pick them up quickly from the examples given.
Developers who are familiar with Objective-C will know many of the frameworks and libraries mentioned; however, an existing knowledge of Objective-C and its frameworks is neither necessary nor assumed.
The sources are provided in a GitHub repository at https://github.com/alblue/com.packtpub.swift.essentials/ and can be used to switch between the content of chapters using the tags in the repository. A knowledge of Git is helpful if you want to navigate between different versions; alternatively, the web-based interface at GitHub can be used instead. It is highly recommended that you become familiar with Git, as it is the standard version control system for Xcode and the de facto standard for open source projects. You are invited to read the Git topics at the author's blog, http://alblue.bandlem.com/Tag/git/, if you are unfamiliar and interested in learning more.
Trademarks
GitHub is a trademark of GitHub Inc., and the examples in this book have not been endorsed, reviewed, or approved by GitHub Inc. Mac and OS X are trademarks of Apple Inc., registered in the U.S. and other countries. iOS is a trademark or registered trademark of Cisco in the U.S. and other countries and is used under license.
Conventions
In this book, you will find a number of styles of text that distinguish