Home Page Icon
Home Page
Table of Contents for
Images
Close
Images
by Erica Sadun
The Swift™ Developer’s Cookbook
About This E-Book
Title Page
Copyright Page
Contents
Preface
How This Book Is Organized
About the Sample Code
Contribute!
Getting GitHub
Contacting the Author
Acknowledgments
About the Author
Editor’s Note: We Want to Hear from You!
Reader Services
1. Welcome to Modern Swift
Migrating Code
How to Migrate
Migration Lessons
Using Swift
Compiled Applications
Frameworks and Libraries
Scripting
REPL
Playgrounds
Other Swift
Learning Swift
Wrap-up
2. Printing and Mirroring
Basic Printing
Printing Multiple Items
Adding Item Separators
String Interpolation
Controlling Line Feeds
Recipe: Printing to Custom Destinations
Printing to Strings
Printing to Custom Output Streams
Recipe: Printing and String Formats
Swift and Format Specifiers
Format Limitations
Conditional Compilation
Debug Printing
Custom Stream Output
Recipe: Postfix Printing
Quick Looks
Quick Look for Custom Types
Quick Looks for Custom Types in Playgrounds
Playground Quick Looks
Creating Custom Quick Looks for Playgrounds
Built-in Quick Look Types
Third-Party Rendering
Using Dump Functions
Building Custom Mirrors
Recursive Reflection
Building Basic Mirror Descriptions Using Protocol Conformance
Adding Header Docs
Building Header Documentation
Markdown Support
Keywords
Special Swift Concerns
Adding Images to Header Docs
Wrap-up
3. Optionals?!
Optionals 101
Unwrapping Optionals
Forced Unwrapping
Conditional Binding
Conditional Binding and Type Casts
Binding Cascades
guard Statements
Implicitly Unwrapped Optionals
Guarding Failable Initializers
Optionals and Sentinel Values
Coalescing
Optional Assignment
Optional Patterns
Optional Chaining
Selector Testing and Optional Chaining
Subscripts
Optional Mapping
Maps and Chaining
Filtering nil Values with flatMap
Unmanaged Wrappers
Wrap-up
4. Closures and Functions
Building a Function
Parameter Names
Label Conventions
Naming Methods and Functions
External and Local Parameters
Defaults
Constant and Variable Parameters
Modifying Parameters
Closures and Functions
Function Types
Using Tuple Arguments
Using Shorthand Argument Names
Inferred Closure Types
Parameter Type Inference
Declaring Type Aliases
Nested Functions
Tuples
From Tuples to Structs
Tuple Return Types
Variadic Parameters
Capturing Values
Autoclosures
Adding Default Closures
Currying
Why Curry?
Building Libraries
Partial Application
Currying Costs
Currying and Callbacks
Practical Currying
Passing Closures as Function Parameters
Wrap-up
5. Generics and Protocols
Expanding to Generics
Protocols
Tokens
Type Constraints
Adopting Protocols
Declaring Protocols
Member Declarations
Building a Basic Protocol
Adding Protocol Default Implementations
Optional Protocol Requirements
Swift-Native Optional Protocol Requirements
Building Generic Types
Type Parameters
Generic Requirements
Conformance Requirements
Recipe: Same-Type Requirements
Generic Beautification
Legal Tokens
Matching Aliases
Protocol Alias Defaults
Collating Associated Types
Extending Generic Types
Using Protocols as Types
Protocol-Based Collections
Self Requirements
Protocol Objects and Self Requirements
Leveraging Protocols
Wrap-up
6. Errors
Failing Hard
Fatal Errors
Assertions
Preconditions
Aborting and Exiting
Failing Gracefully
The ErrorType Protocol
Choosing Between Optionals and Error Handling
Swift Error Rules
Rule 1: Move Away from nil Sentinels
Rule 2: Use throw to Raise Errors
Rule 3: Use Error Types with Visible Access
Rule 4: Mark All Error-Participating Methods with throws
Rule 5: Use rethrows Consistently
Rule 6: Consume Errors Where They Matter
Rule 7: Terminate Threaded Error Chains
Building Errors
Good Errors
Naming Your Errors
Adding String Descriptions
Adding Reasons
Simplifying Output
Extending String
Type-Specific Errors
Retrieving Context
Contextualizing Strings
Contextualizing Throwing Types
Simplifying Contexts
Calling Throwing Functions
Using try
Error Propagation
Using try!
Using try?
Implementing Alternatives to try?
Guarding Results
Building a Printing Version of try?
Working with guard and defer
Wrap-up
7. Types
Language Concepts
Reference and Value Types
Copy-and-Write-Back
Algebraic Data Types
Other Terminology
Enumerations
Basic Enumerations
Using Hash Values to Support Ranges
Raw Value Enumerations
Raw Value Members and Sequences
Associated Values
Indirect Values
Switches
Branching
Breaks
Fallthroughs
Complex Cases
Tuples
Pattern Matching with Value Bindings
where Clauses
Unwrapping Optional Enumerations
Embedding Values by Type
Option Sets
Revisiting NS_OPTIONS
Building Enumerations
Building Option Sets
Viewing Options
Classes
Optimization
Initializers
Initialization Steps
Designated and Convenience Initializers
Initialization Rules
Building Convenience Initializers
Failable and Throwing Initializers
Deinitializers
Property Observers
Getters/Setters and Access-Level Modifiers
Extensions and Overrides
Lazy Evaluation
Lazy Sequences
Lazy Properties
Wrap-up
8. Miscellany
Statement Labels
Custom Operators
Declaring Operators
Conforming with Operators
Evaluating Operator Trade-offs
Array Indexing
Multi-indexed Array Access
Wrapped Indices
Array Slices
General Subscripting
Parameter-less Subscripting
String Utilities
Repeat Initializers
Strings and Radix
String Ranges
String Splitting
String Subscripts
Foundation Interoperability
Joining and Extending
Permutation Generator
Wrap-up
Index
Inside Front Cover
Inside Back Cover
Code Snippets
Search in book...
Toggle Font Controls
Playlists
Add To
Create new playlist
Name your new playlist
Playlist description (optional)
Cancel
Create playlist
Sign In
Email address
Password
Forgot Password?
Create account
Login
or
Continue with Facebook
Continue with Google
Sign Up
Full Name
Email address
Confirm Email Address
Password
Login
Create account
or
Continue with Facebook
Continue with Google
Prev
Previous Chapter
Images
Next
Next Chapter
Images
Add Highlight
No Comment
..................Content has been hidden....................
You can't read the all page of ebook, please click
here
login for view all page.
Day Mode
Cloud Mode
Night Mode
Reset