@objc keyword, 112
? (question mark), 44
postfixed question marks, 57
abort() function, 128
access control, 159
access-level modifiers, 185-186
aliases, type aliases, 78
alternatives to try? operator, 149-151
Apple Developer Forums, 9
Apple Swift blog, 9
applications, 4
terminating
abort() function, 128
fatalError() function, 126
arguments. See also parameters
separator, 13
shorthand argument names, 74-76
tuple arguments, 74
comparing with tuples, 73
multi-index array subscripting, 84, 194-195
typed arrays, 84
as operator, 47
ASCII WWDC, 9
associated types, 118
Ballard, Kevin, 197
beautification, 117
best practices
for protocols, 124
annotating with throws keyword, 134
consuming errors, 135
error types with visible access, 133
blogs, Apple Swift blog, 9
bracket overload, 117
breaks, 167
building
convenience initializers, 181
parameters, 69
option sets, 176
protocols, 109
with default implementations, 110-111
built-in Quick Look types, 27-28
capturing values
chat rooms, 9
convenience initializers, 179
designated initializers, 179
failable initializers, 181-183
optimization, 178
subclassing, 178
closures, 65
capturing values
passing as function parameters, 97-99
shorthand argument names, 74-76
trailing closures, 77
tuples
arguments, 74
coalescing, 55
Cocoa coding guidelines, 68
collating associated types, 119-120
collections, protocol-based, 121
commenting
adding images to header documentation, 40
building header documentation, 35-36
method/function annotations, 40
Comparable protocol, 160
comparing
arrays and tuples, 73
nil and error handling, 43
compiling, conditional compilation, 20-21
complex cases, 169
conditional binding, 46
conditional compilation, 20-21
conformance requirements, 115
conforming to the protocol, 102
constraints
conformance requirements, 115
same-type requirements, 115-117
constructors, 67
referencing, 68
constructs, 158
consuming errors, 135
control flow, 189
convenience initializers, 179
building, 181
converting
Swift code to modern syntax, 2-4
tuples to structs, 82
convolution libraries, building, 92-93
convolution operations, 91
cost of currying, 94
Curry, Haskell, 91
convolution libraries, building, 92-93
cost of, 94
partial application, 93
reasons for using, 92
custom destinations, printing to, 15-18
custom mirrors, building, 31-34
CustomDebugStringConvertible protocol, 22
CustomStringConvertible protocol, 22, 177
De Franceschi, Davide, 160
fallback cascade, 22
Self requirements, 122
default values, adding to closures, 90-91
designated initializers, 179
dictionaries, ? (question mark), 44
didSet, 185
documentation, Quick Help, 35-40
adding images to header documentation, 40
building header documentation, 35-36
method/function annotations, 40
DoubleInitializable protocol, 109
dump() function, 30
embedding values by type, 172-174
raw value enumerations, 162-163
adding context to errors, 141-142
calling throwing functions, 145-149
error propagation, 147
try! operator, 148
contextualizing strings, 142-143
contextualizing throwing types, 143-144
enumerations, 139
good errors, 138
versus nil, 43
versus optionals, 130
string descriptions, adding, 139-141
reasons for errors, supplying, 139
simplifying output, 140
type-specific errors, 141
annotating with throws keyword, 134
consuming errors, 135
error types with visible access, 133
terminate threaded error chains, 135-137
establishing
generic types, 114
protocols, 105
evaluating operator trade-offs, 192-193
explicit typing, 75
extending generic types, 120-121
failable initializers, 52-53, 163, 181-183
fatalError() function, 126
flatmap() function, 62
FloatLiteralConvertible protocol, 109
format specifiers, 19
Foundation interoperability with Swift, 203
functions
abort(), 128
annotations in Quick Help, 40
parameters, 69
convolution libraries, building, 92-93
cost of, 94
partial application, 93, 95-97
reasons for using, 92
fallback cascade, 22
dump(), 30
fatalError(), 126
flatmap(), 62
parameters
labels, 66
modifying, 72
fallback cascade, 22
item separators, 13
terminator parameter, 14
tuples
arguments, 74
generics, 101-102. See also types
associated types, collating, 119-120
beautification, 117
constraints
conformance requirements, 115
same-type requirements, 115-117
good errors, 138
Hashable protocol, 114
header documentation, building, 35-36
IEEE printf specification, 18
if statements, 14
images, adding to header documentation, 40
implicitly unwrapped optionals, 51-52
indices, wrapping, 195
inheritance, multiple inheritance, 103
convenience initializers, 179
building, 181
designated initializers, 179
failable initializers, 181-183
initializing, strings, 19
inout parameters, 16
IRC (Internet Relay Chat), 9
item separators, 13
joinWithSeparator function, 203
kernels, 91
Keychain Services, 62
keywords
@objc keyword, 112
inout, 72
protocol, 106
label terms, 39
static, 107
throws, 134
label terms (Quick Help), 39
labels, 66
Lattner, Chris, 1
lazy evaluation
lazy properties, 188
convolution libraries, building, 92-93
visualization libraries, 29
limitations, of format specifiers, 19-20
line feeds, controlling, 14-15
logging, mirroring, 30
building custom mirrors, 31-34
protocol extensions, 34
Mandelbrot sets, 7
markdown support, Quick Help, 36-37
members, 158
Memory Management Programming Guide for Core Foundation, 64
methods
annotations in Quick Help, 40
mirroring, 30
building custom mirrors, 31-34
protocol extensions, 34
modifying parameters, 72
multi-index array subscripting, 84, 194-195
multiple inheritance, 103
mutating requirements, 108
naming
coalescing, 55
versus error handling, 43
NSLog, 18
Objective-C
optional protocol requirements, 111-112
objects, protocol objects, 123
as, 47
conforming with, 192
evaluating trade-offs, 192-193
postfix printing operators, 23
try!, 148
building, 176
building enumerations, 175-176
optional protocol requirements
Swift, 112
? (question mark), 44
versus error handling, 130
conditional binding, 46
guard statements, 50
implicitly unwrapped optionals, 51-52
out of date code, upgrading, 4
OutputStreamType protocol, 15
over-chaining, 58
parameter keyword, 37
parameter-less subscripting, 197-198
labels, 66
modifying, 72
NSLog, 19
terminator parameter, 14
Swift conventions, 69
partial application, 93, 95-97
passing closures as function parameters, 97-99
pattern matching, optional patterns, 56-58
Permutation Generator, 203-205
playgrounds, 7
Point struct, 22
postfix printing, 23
postfixed question marks, 57
item separators, 13
terminator parameter, 14
to custom output streams, 17-18
dump() function, 30
option sets, 177
postfix printing, 23
product types, 158
protocol extensions, 34
protocol-based collections, 121
protocols, 101-103, 118. See also types
alias defaults, 119
best practices, 124
building, 109
with default implementations, 110-111
Comparable, 160
CustomDebugStringConvertible, 22
CustomStringConvertible, 22, 177
Self requirements, 122
DoubleInitializable, 109
FloatLiteralConvertible, 109
Hashable, 114
implementation, 103
multiple inheritance, 103
mutating requirements, 108
objects, 123
optional requirements
Swift, 112
Self requirements, 108
static keyword, 107
pyramids of doom, 48
adding images to header documentation, 40
building header documentation, 35-36
label terms, 39
method/function annotations, 40
built-in Quick Look types, 27-28
raw value enumerations, 162-163
recipes
adding context to errors, 141-142
adding index safety to arrays, 193-194
conditional binding from unmanaged wrappers, 63
currying and partial application, 95
establishing generic types, 114
mimicking try? with printing, 151
multi-index array subscripting, 84
multiple-array subscripting, 194-195
multiple-instance collection, 205
optional chaining, 59
postfix printing, 23
printable option sets, 177
printing and string formats, 18-21
conditional compilation, 20-21
format specifiers, 19
printing to custom destinations, 15-18
same-type requirements, 115-117
scrambled collections, 204
striding indices with a Permutation Generator, 204-205
recognizers, 185
redirecting print output, 15-18
reference semantics, 178
referencing constructs, 68
repeat initializers, 198
REPL (read eval print loop), 6-7
playgrounds, 7
returns keyword, 37
same-type requirements, 115-117
Schönfinkel, Moses, 91
scripting, 6
separator argument, 13
shebangs, 6
shorthand argument names, 74-76
Sinclair, Jared, 186
splitting strings, 201
static keyword, 107
strings
initializing, 19
repeat initializers, 198
splitting, 201
structs, 82
Point, 22
multi-index array subscripting, 84, 194-195
wrapping, 195
sum types, 158
The Swift Programming Language, 8
Swift Standard Library Reference, 9
Swiftsub, 8
breaks, 167
complex cases, 169
tuples, 169
unwrapping optional enumerations, 171-172
terminating applications
abort() function, 128
fatalError() function, 126
throwing functions
error propagation, 147
try! operator, 148
trailing closures, 77
try! operator, 148
comparing with arrays, 73
converting to structs, 82
convolution libraries, building, 92-93
cost of, 94
partial application, 93, 95-97
reasons for using, 92
reflection, 81
type aliases, 78
type constraints, 104
typed arrays, 84
types, 155
associated types, 118
optimization, 178
subclassing, 178
enumerations
raw value enumerations, 162-163
generic types
strings
repeat initializers, 198
splitting, 201
uniq function, 117
untyped closure assignment, 76-77
unwrapping optionals, 45-58, 171-172
conditional binding, 46
guard statements, 50
implicitly unwrapped optionals, 51-52
updating Swift code to modern syntax, 2-4
upgrading out-of-date code, 4
Using Swift with Cocoa and Objective-C, 8
values
capturing
visualization libraries, 29
websites, Apple Developer Forums, 9
wrapping indices, 195
Xcode
13.59.180.145