Table of Contents
Welcome to Swift Style xi
1 Structure Your Code for Readability 1
Taking Control of Swift Structure 1
Understanding Swift Semicolons 13
Styling Colinear Braces 15
Hugging Parentheses 17
Wrapping Argument Lists 17
Coaligning Assignments 19
Improving Closure Hygiene 19
Choosing Trailing Closures 24
Laying Out Partial Application 27
Laying Out Complex Guard Statements 29
Laying Out Ternaries 30
Binary Conditionals 31
Laying Out Long Collections 31
Weighing Late Property Declaration 33
Wrapping Up 34
2 Adopt Conventional Styling 35
Adopting Conventional Spacing 36
Mandating Maximum Line Widths 38
Selecting Colon Styles 38
Placing Attributes 41
Formatting Number Literals 42
Balancing Literals and Types 45
Constructing Collections with Literals 50
Optional Sugar 56
Mitigating Optional Constipation 56
Converting to Tuples 57
Considering Comma-First Styles 58
Wrapping Up 58
3 Establish Preferred Practices 61
Testing Assumptions 62
Choosing Optionals 66
Converting Collection Lookup to Optionals 71
Casting Conditionally 73
Chaining Calls 75
Moving from Thrown Errors to Optionals 77
Unwrapping Variables 77
Mapping in Condition Clauses 77
Iterating Collections of Optionals 78
Working with Optional Collections 79
Choosing Result Types 80
Adding Lazy Evaluation 81
Selecting Sequences and Strides 83
Looping 87
Indexing and Enumerating Collections 90
Switch Statements 92
Declaring Number Constants and Variables 98
Implementing Getters and Setters 98
Returning Void 100
Grouping Initializers 102
Using Call Site Inferencing 104
Evaluating Case-Binding Syntax 108
Using If/Guard-Case 112
Choosing Capture Modifiers 112
Other Practices 114
Wrapping Up 118
4 Design the Right APIs 121
Adopting Access Control 122
Avoiding Global Symbols 128
Nesting Functions 131
Nesting Types 132
Designing Singletons 134
Adding Custom Operators 136
Naming Generic Parameters 144
Naming Symbols 145
Plurality 150
Choosing Label Names 153
Initializers 159
Convenience Initializers 160
Naming Methods and Functions 161
Tips for Naming 163
Mutating Variations 163
Computed Properties vs. Methods 164
Adding Defaults 164
Protocols 166
Generic Beautification 167
Adding Typealiases 168
Choosing Value vs. Reference Types 169
Writing Good Errors 170
Wrapping Up 171
5 Look to the Past and the Future 173
Reconciling Past You vs. Future You 173
Documenting in Real Time 174
Adding Structured Markup 175
Commenting Well 179
Organizing with Bookmarks 183
Improving Code Descriptions 185
Avoiding Clever 187
Wrapping Up 188
6 Good Code 189
Index 191