1
004.438
76
76
Swift. iOS. .: ,
2016. 304 .: . ( ).
ISBN 978-5-496-02256-9
Swift , ,
iOS-.
, , Apple 2.0, 2.1,
.
Swift
iOS-. , ,
. , , Swift,
iOS, OS X, tvOS watchOS.
32.973.2-018.1
004.438
.
.
ISBN 978-5-496-02256-9
, 2016
, 2016
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Swift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
I. Xcode . . . . . . . . . . . . . . . . . . . . . . . . 13
1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.1. Mac . . . . . . . . . . . . . . . . . . . . . 14
1.2. Apple- . . . . . . . . . . . . . 14
1.3. Xcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2. Xcode playground- . . . . . . . . 18
2.1. code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2. playground- . . . . . . . . . . . . . . . . . . . . . 21
2.3. playground- . . . . . . . . . . . . . . . . . . . . 23
II. Swift . . . . . . . . . . . . . . . . 27
3. . . . . . . . . . . . . . . . . . . . . . . . 28
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
29
. 31
34
35
37
39
4. . . . . . . . . . . 40
4.1. . . . . . . . . . . . . . . . . . . . . 40
4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4
4.3.
4.4.
4.5.
4.6.
. .
. . . .
. . . . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
56
62
65
67
III. Swift . . . . . . . . . . . . . . . . . . 69
5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.1. . . . . . . . . . . . . . . . . . . . . . 70
5.2. . . . . . . . . . . . . . . . 72
6. . . . . . . . . . . . . . 78
6.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.2. . . . . . . . . . . . . . . . . 80
7. . . . . . . . . . . . . . . . . . . . . . . . . . . 83
8. . . . . . . . . . . . 86
8.1.
8.2.
8.3.
8.4.
if . . . . . .
guard . . . . . . . . .
. . . .
switch
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
86
97
98
98
9. . . . . . . . . . . . . . . . . . . . . . . . 109
9.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
109
120
128
10. . . . . . . . . 135
10.1. for . . . . . . . . . . . . . . . . . . . . . . . .
10.2. while repeatwhile . . . . . . . . . .
10.3. . . . . . . . . . . . . . . . . . . . . . . . . . . .
135
142
144
11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
11.1.
11.2.
11.3.
11.4.
11.5.
11.6.
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
148
151
162
163
164
165
12. . . . . . . . . . . . . . . . . . . . . . . . . . . 167
12.1. . . . . . . . . .
12.2. . . . . . . . .
12.3. . . .
12.4. . .
12.5. - . . . . . . . . .
12.6. . . . . . . . . . . . .
12.7. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
167
170
171
172
174
175
176
180
182
14. . . . . . . . . . . . . . . . . . . . . . . . . 184
14.1. . . . . . . . . . . . . . .
14.2. . . . . . . . . . . .
14.3. switch . . . . . .
14.4.
14.5. . . . . . . . . . . . . .
14.6. . . . . . . . . . . . . . .
14.7. self . . . . . . . . . . . . . . . . . . . . . . .
14.8. . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
184
187
189
190
192
193
194
195
15. . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
15.1.
15.2.
15.3.
15.4.
15.5.
. .
. . . . . . . . .
. . .
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
199
200
202
203
204
16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
16.1.
16.2.
16.3.
16.4.
16.5.
. . . . . . .
. . . . . . . .
. . . . . . . . .
. .
. . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
207
207
210
211
212
17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
17.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17.2. . . . . . . . . . .
17.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
214
216
220
18. . . . . . . . . . . . . . . . . . . . . . . . . . . 223
18.1. . . . . . . . . . . . . . . . . . . . . . . . .
18.2. . . . . . . . . . . . . . . . . . . . . . . . . .
223
224
19. . . . . . . . . . . . . . . . . . . . . . . . . 229
19.1.
19.2.
19.3.
19.4.
19.5.
. . . . . . . . . . . . . . .
. .
final . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
229
231
234
235
235
238
240
21. . . 241
21.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
241
248
250
252
255
23. . . . . . . . . . . . . . . . 258
23.1. . . . . .
23.2. . . . . .
23.3. . . . . . .
258
260
261
24. . . . . . . . . . . . . . . . . . . . . . . . . . 262
24.1.
24.2.
24.3.
24.4.
. .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
263
264
265
266
25. . . . . . . . . . . . . . . . . . . . . . . . . . . 267
25.1. . . . . . . . . . .
25.2. . . . . . . . . . . .
25.3. . . . .
25.4.
25.5. . . . . . . .
25.6. . . . . . .
25.7. . . . . . . . . .
25.8. . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
.........
268
269
270
271
271
272
273
274
26.
. . . . . . . . . . . . . . . . . . . . . 275
27. . . . . . . . . . . . . . . 283
27.1.
27.2.
27.3.
27.4.
27.5.
. . . . . . .
. . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
283
285
287
288
288
28. . . . . . . . . . . . . . . . . . . . . 291
28.1. . . . . . . . . . . . . . . . . . . . . . . . . . .
28.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28.3. . . . . . . . . . . . . . . . . .
291
292
297
29.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
29.1. . . . . . . . . . . . . . . . . . . . . . . . . . .
29.2. . . . . . . . . . . . . . . . . . . . .
298
301
Apple (Worldwide Developers Conference, WWDC) 2 2014
iOS-, , Swift.
: ,
,
Objective-C, iOS8 .
, Swift, , ,
. , , 8 2015 Apple
2.0,
iOS9. ,
, 2.1, .
- Objective-C, Swift , ,
1. Swift
, , Apple
. , Swift
Apple ,
(
iOS OS X)2.
Swift Objective-C
.
, , ,
Objective-C.
2
Swift
iOS OS X, watchOS (
Apple Watch) tvOS (
Apple TV 4- ).
.
1
Swift
Swift , , . , Swift
, C, Objective-C Java. Swift
, . .
, ,
Xcode ( , ) , . ,
!
Swift , :
-.
Swift - , .
, : .
, .
Swift , . ,
, , , , (
!) .
.
Swift
, . Swift : , . ,
, Swift
.
.
Swift , (
10
) C++1.
Swift -
.
Swift: ,
, .
.
( -, ,
). iOS
,
.
Swift
iOS- ( OS X-, watchOStvOS-). ,
,
. ,
. ,
iOS-, Swift. ,
App Store Mac App Store. , ,
iOS, OS X, tvOS watchOS.
Swift 2.1,
iOS 9.1 Xcode 7.1.
, ,
- .
, Apple
1
Primate Tabs Geekbench.
11
Swift, . ,
alkal@ya.ru.
?
iOS ( iPhone iPad), OS X, watchOS
tvOS?
?
.
.
.
, Swift (
Objective-C), . ,
iOS OS X.
, . , , , .
. Swift!
, ,
.
Xcode ( ).
: ,
! .
:
I. Xcode. Swift,
12
, . , Apple
ID, apple-,
Swift-, .
II. Swift.
Xcode,
, Swift.
, Swift, , .
III. Swift.
,
Swift. (, ) ,
, , (, ) ,
, .
IV. Swift.
Swift.
.
.
.
()
I
Xcode
,
Swift. , ,
Xcode,
.
, . Swift, http://swiftstub.com/,
Swift- .
Xcode,
( ). ,
,
.
, Xcode,
Swift,
.
99 1.
99 2. Xcode Playground-
1.1. Mac
Swift,
.
iMac, MacBook, Mac mini Mac Pro
Mavericks (OS X 10.9), Yosemite (OS X 10.10) El Capitan
(OS X 10.11). ,
Xcode Apple . ,
Swift , , ,
.
Windows OS X,
:
Mac OS X;
OS X ( Hackintosh);
Windows
OS X.
,
,
, Mac.
1.2. Apple-
Apple ID
Apple-.
https://developer.apple.com/register/
(.1.1).
1 15
. 1.1.
Apple ID , , Apple. ,
Apple ID. , , AppStore iCloud.com.
Apple ID,
Create Apple ID.
.
Apple ID,
( SignIn).
SDKs, Apple- (.1.2).
, , ,
.
.
, ( ).
99
iOS- (iOS Developer Program), Apple. ,
16 I. Xcode
. 1.2.
(
) App Store ( ) ,
.
, iOS-
Xcode.
1.3. Xcode
, , Xcode.
, (.1.3).
, Apple Xcode.
, Apple-.
1 17
. 1.3. Xcode
, . Xcode
Apple ID.
Xcode
Launchpad .
Xcode
playground-
2.1. code
Swift Xcode.
(Integrated Development
Environment, IDE) ,
().
:
;
/ ;
;
.
2 Xcode playground- 19
. 2.1. Xcode
Xcode ( ).
,
Xcode, ,
. Xcode. , ,
(
install).
Xcode
.
, Xcode (.2.2).
:
. Xcode
.
, :
Get started with a playground playground-.
, , .
Create a new Xcode project iOS
OS X.
20 I. Xcode
. 2.2. Xcode
Check out an existing project
.
. , Xcode ,
. , .
/ .
.
Xcode 7, Swift,
playground-. Playground- ,
,
.
, .
, playground-! .2.3.
, playground-
Xcode,
2 Xcode playground- 21
. 2.3. playground-
. , playground-
, .
playground-
.
2.2. playground-
, . Playground- .
Get started with a playground
playground-. Xcode
playground-, ,
. :
iOS OS X. playground .
Part 1 Basics, iOS
Next.
;
playground- (.2.4).
22 I. Xcode
:
,
swift-.
.
, Xcode ,
, .
. 2.4. playground-
, str .
. ,
Swift.
"Hello, playground"
, , .2.5.
. 2.5.
, .
.
2 Xcode playground- 23
2.3. playground-
Playground- . 6.3
Xcode markdown- . .2.6 EditorShow Rendered Markup.
, , (.2.7).
. 2.6.
N times , N ,
, N .
.2.7.
.
swift- playground- Xcode.
Xcode ,
( Xcode ).
playground-
24 I. Xcode
. 2.7.
. 2.8. Xcode
,
(.2.8).
, ,
, .
. (, , , ..)
.
2 Xcode playground- 25
code, , .
, .
,
.
(.2.9).
. 2.9. playground-
(Debug Area). ,
View Debug Area Show Debug Area
.
.
Xcode 7
Assistant Editor.
, .
.
Swift
. Alt
(, str ),
, ,
, (.2.10).
26 I. Xcode
. 2.10.
Xcode playground- !
Swift. Swift , .
II
Swift
Swift .
,
Apple. , ,
,
Swift.
, Swift , (). , Swift
. .
,
, , , .
99 3.
99 4.
Swift, ,
, ( , ) . Swift .
, . ,
playground- Xcode.
,
. ( ), .
, . .
Swift : .
,
.
.
, () (.3.1).
, , , .
,
, .
, , ,
(.3.2).
3 29
,
.
. 3.1.
. 3.2.
,
,
, , , . ,
, ,
.
3.1.
,
, . Swift ,
. ,
, .
. ,
. :
: .
, -
, .
30 II. Swift
:
. .
(,
a). , (, !b), ,
(, i++). (, 1+6). .
.
, . Swift
a ? b : c.
(=) . a = b, a b.
,
( ).
Swift
, ( ).
, , ,
. Swift
.
, ( ). ,
,
(.3.3).
, , , (, ), ,
, ,
(, ).
.
3 31
. 3.3.
,
. , , ,
, :
=
, ( )
, , , .
Swift,
.
(, , ).
3.2.
. (), .
.
,
.
( ),
32 II. Swift
.
, . , ,
:
.
. ,
Swift, . Swift
var,
.
var _ = _
var , (
). , , .
3.1.
3.1
1 // var
2 var dragonsBox = " "
:
.
3 33
3.2
1
2
3
4
// var
var dragonsBox = " "
//
dragonsBox = " "
let _ = _
let , . ,
,
.
3.3.
3.3
1 // let
2 let dragonsBox = " "
34 II. Swift
3.4
1 let dragonsBox = " "
2 dragonsBox = " " // :
, , , ,
. Swift
,
. , Xcode
,
, , .
,
.
. , .
, var let
. .
Swift
var let. :
var x = 0.1, y = 5
let a = 2, b = 7.1
.
Swift , , Objective-C,
.
3.3.
Swift ()
. , Unicode, ( !), :
. , -
3 35
( , , ..) ( )
. : myBestText,
theBestCountry, highScore.
Unicode- ( 3.5), .
3.5
1 //
2 var dw = "R"
,
.
, . .
, Swift - ,
(`),
, (3.6).
Swift var.
, .
3.6
1 // var
2 var `var` = " "
3 `var`
"
"
"
"
,
`var`.
, .
3.4.
, Xcode playground-
. (3.7).
36 II. Swift
3.7
1
2
3
4
//
var dragonsBox = " "
//
dragonsBox
" "
" "
( playground-
iOS)
( ). print().
, .
, . .
Swift ,
. .
print() 3.8.
3.8
1 // -
2 print(", !")
", !\n"
:
, !
, print().
, ,
(\n).
Xcode 6
: println() print(). , . Xcode 7 print() ,
println() print().
(\n).
, ( ),
3.9.
3 37
3.9
1
2
3
4
//
var dragonsBox = " "
//
print(dragonsBox)
" "
" \n"
gragonsBox print() ( ),
.
( ).
(),
. 3.10.
3.10
1
2
3
4
//
var dragonsBox = " "
//
print(" \(dragonsBox)")
(
).
3.5.
.
. ,
, .
Swift, ,
,
. Swift .
38 II. Swift
(// ) ,
(/* */). 3.11.
3.11
1 // -
2 /* 3
4 */
, ,
.
, playgound- markdown- . playground-
.
(//:),
. .3.4.
. 3.4. markdown-
, markdown ,
, Xcode Editor Show Rendered Markup.
.3.5.
markdown-
, EditorShow Raw Markup.
3 39
. 3.5. markdown-
3.6.
- , ,
,
(;). , , ,
.
, Swift
. ,
. 3.12.
3.12
1
2
3
4
// -
var number = 18
// -
number = 55; print(number)
Swift . ,
, . , .
, . (). ,
(),
. , ,
( ):
, , ,
.
, , , , , . Swift,
C, Objective-C, ,
( Apple, )
.
,
.
4.1.
. Swift ,
. 4.1.
4.1
1 //
2 var dragonsBox = " "
4 41
. , :
gragonBox
" ".
: Swift . , ,
, 4.1
:
gragonBox " ".
:
String gragonBox " ".
String , Swift -
.
. .
, Swift , .
()
. ,
, , .
4.2.
4.2
1
2
3
4
5
6
// dragonsBox
var dragonsBox: String
// trollsPot
var trollsPot = " "
// gragonsName
var dragonsName: String = " "
String ,
. dragonsBox
, trollsPot gragonsName .
. , -
42 II. Swift
, .
(4.3).
4.3
1 var newDragonsBox // :
Swift . , .
,
.
, (value type). -
Swift -, (reference type).
- .
,
, .
,
, .
(,
) ,
-
.
(, , ,
),
.
.
,
, ,
.
, ,
.
.
.
4 43
4.2.
, Swift
. ,
.
, , 81 18.
( , )
(
). Swift , .
.
,
, /
.
Int ( ) UInt
( ). 4.4.
4.4
1
2
3
4
5
6
7
8
9
//
var signedNum: Int
//
signedNum = -32
-32
/*
*/
var unsignedNum: UInt = 128
128
, N +N,
0 +2N, N
.
44 II. Swift
Swift:
.
, . , 2 .
( ) (
). ,
. , , .
Swift , , :
_. = 490
_.()
, , .
,
. ( )
,
.
min max. ,
,
(4.5).
4.5
1
2
3
4
5
// Int8
var minInt8 = Int8.min
// Int8
var maxInt8 = Int8.max
// UInt8
-128
127
4 45
6 var minUInt8 = UInt8.min
7 // UInt8
8 var maxUInt8 = UInt8.max
0
255
-
(), , ,
.
, .
, Apple Int UInt, .
, , Swift
. , .
.
playground- .
1. Int8
Uint8.
2. , Uint8,
, Int8. ,
.
3. .
4. ,
, .
.
5. .
6. ,
.
7. .
,
.
46 II. Swift
, Swift, , ,
. 3.14 -192.884022.
, , , .
, , : Float Double.
.
Float 32- ,
6 .
Double 64- ,
15 .
, ,
4.6.
4.6
1
2
3
4
5
6
// Float
var numFloat: Float = 104.3
104,3
// Double
let numDouble: Double
// Float
var someNumber = 8.36
8,36
, someNumber
( ).
Swift Double.
. ,
.
1. . Float ,
Float,
Double.
2. ,
.
4 47
, . , , . Swift
, .
. Swift :
+ (a + b).
.
+ ,
(+a).
.
.
- (a - b).
.
- ,
(-a). .
.
.
*
(a * b). -
.
/ (a / b).
.
%
. , ,
,
, , , (a % b).
.
++
,
48 II. Swift
(++a a++). ,
.
--
, (--a a--). , .
(
).
,
Double
(4.7).
4.7
1
2
3
4
5
6
//
var numOne = 19
var numTwo = 4
//
var numThree = 3.13
var numFour = 1.1
19
4
3.13
1.1
Int, Double.
,
. 4.8.
4.8
1 //
2 var numOne = 19
3 var numTwo = 4
4 //
5 var sum = numOne + numTwo
6 //
7 var diff = numOne - numTwo
8 //
9 var mult = numOne * numTwo
10 //
11 var qo = numOne / numTwo
23
15
76
4
. , . :
4 49
(4.9).
4.9
1 //
2 var numThree = 3.13
3 var numFour = 1.1
4 //
5 var sumD = numThree + numFour
6 //
7 var diffD = numThree - numFour
8 //
9 var multD = numThree * numFour
10 //
11 var qoD = numThree / numFour
4,23
2,03
3,443
2,84545454545455
Double.
Swift
.
. ( 4.10).
4.10
1
2
3
4
5
6
7
//
var numOne = 19
var numTwo = 4
//
var res1 = numOne % numTwo
var res2 = -numOne % numTwo
var res3 = numOne % -numTwo
19
4
3
-3
3
50 II. Swift
, .
:
numOne (numTwo * 4) = 3
19 (4 * 4) = 3
19 16 = 3
3 = 3
, numOne 4 numTwo, 3
, numTwo.
4
1
4
2
4
6
4
10
11
12
13
3
14
15
16
17
18
19
, .
. , ,
,
.
, (++) (--)
. 4.11.
4.11
1
2
3
4
5
6
7
8
//
var numOne = 19
//
numOne++
numOne
//
++numOne
numOne
19
19
20
21
21
:
numOne = numOne + 1
,
( ). :
()
, .
4 51
()
, .
numOne++ , , . Swift numOne , .
19. numOne
, .
(++numOne), , .
.
Swift , .
, ,
.
, Int Double , Xcode
.
Swift,
, .
.
, . ,
, ,
.
, .
,
,
.
init(),
Double :
Double.init()
,
. Swift
, :
Double()
52 II. Swift
,
.
,
.
Swift,
, :
Int()
Int.
Double()
Double.
Float()
Float.
UInt, Int8 ..
,
, .
(, , ). , :
( 4.12).
4.12
1
2
3
4
5
6
7
// Int
var numInt = 19
// Double
var numDouble = 3.13
//
var resD = Double(numInt) * numDouble
var resI = numInt * Int(numDouble)
19
3,13
59,47
57
:
Double Int
.
Int Double
.
, resD
, resI. ,
,
Double(), , Int()
Double.
4 53
, .
Swift .
, ,
, .
(+, -, *, /,
%) (=). 4.13,
,
.
4.13
1 // Int
2 var someNumInt = 19
3 //
4 someNumInt += 5
5 /*
6 someNumInt = someNumInt+5 */
7 //
8 someNumInt
9 //
10 someNumInt *= 3
11 /*
12 someNumInt = someNumInt*5 */
13 //
14 someNumInt
15 //
16 someNumInt -= 3
17 /*
18 someNumInt = someNumInt-5 */
19 //
20 someNumInt
21 //
22 someNumInt %= 8
23 /*
24 someNumInt = someNumInt%5 */
25 //
26 someNumInt
19
24
24
72
72
69
69
5
54 II. Swift
.
,
, .
( 4.14).
4.14
1
2
3
4
5
// Int
var someNumInt = 19
//
++someNumInt
//
6 someNumInt = someNumInt
7 //
8 someNumInt += 1
+ 1
19
20
21
22
someNumInt
.
. .
1. : Int,
Float Double. .
2. : Int
18, Float 16.4, Double 5.7. .
3. Float.
4.
Int. , .
5. Float
Double
Double.
6.
.
4 55
,
, , , ,
.
,
.
Swift :
. .
. 0b
.
.
0o .
. 0 .
. 4.15 17 .
4.15
1
2
3
4
5
6
7
8
// 17
let deciamlInteger = 17
// 17
let binaryInteger = 0b10001
// 17
let octalInteger = 0o21
// 17
let hexadecimalInteger = 0x11
17
17
17
17
,
17.
( )
( 0 ).
( ) .
.
e p .
56 II. Swift
:
1.25e2 1.25 * 102, 125.0.
:
0xFp-2 15 * 22, 3.75.
4.16 12.1875
.
4.16
1
2
3
4
5
6
//
let deciamlDouble = 12.1875
//
/*
exponentDouble = 1.21875*101 */
let exponentDouble = 1.21875e1
//
/*
hexadecimalDouble = 0xC.3*20 */
let hexadecimalDouble = 0xC.3p0
12,1875
12,1875
12,1875
,
.
.
()
( 4.17).
4.17
1 var number = 1_000_000
1000000
,
, .
.
4.3.
, Swift . :
4 57
,
?
Swift ,
:
Character .
String
.
, Unicode.
, ,
.
.
, ("").
Character.
(4.18).
4.18
1 var char: Character = "a"
2 char
"a"
"a"
char .
Character Xcode
.
Swift
String
Character.
, String .
.
Swift 2
String. , , Character.
58 II. Swift
String , ,
.
String.
String ( 4.19).
4.19
1 // String
2 var stringOne = "Dragon"
"Dragon"
,
String.
, , ,
, .
.
( 4.20).
4.20
1
2
3
4
//
var emptyString = ""
// String
var anotherEmptyString = String()
""
""
() .
, ,
String.
String ,
. ,
, ( 4.21).
4.21
1
2
3
4
5
//
var str: String
//
str = "Hello, Troll!"
str
"Hello, Troll!"
"Hello, Troll!"
4 59
str ,
.
, .
Swift String() , (
4.22).
4.22
1 //
2 var notEmptyString = String("Hello, Troll!") "Hello, Troll!"
notEmptyString
"Hello, Troll!".
String()
, ( 4.23).
4.23
1
2
3
4
// Double
var numDouble = 74.22
// , Double
var numString = String(numDouble)
74,22
"74.22"
String()
String. , Float(), Double() Int().
,
. :
.
,
,
( 4.24).
4.24
1 // String
2 var name = ""
""
60 II. Swift
3 // String c
4 let hello = ", \(name)!"
5 //
6 var meters: Double = 10
7 let text = " \(meters * 3.28) "
",
!"
10
" 32.8 "
hello
name . Swift.
print().
,
, .
( 4.25).
4.25
1
2
3
4
5
6
7
// String
let firstText = " "
// Double
var weight = 12.4
// String
let secondText = " "
//
8 var text = firstText + String(weight) +
secondText
" "
12,4
" "
" 12.4 "
.
weight ,
String().
Character String.
String characters.
Swift,
( 4.26).
4 61
4.26
1
2
3
4
// String
var str = "Hello, Troll!"
//
var collection = str.characters
"Hello, Troll!"
String.CharacterView
collection
.
Swift .
,
.
.
, ollection ( 4.27).
4.27
1 //
2 collection.count
13
str.
Xcode.
,
.
1. String .
2. Character, .
3. Int .
4. String , Character
Int, .
5. .
62 II. Swift
4.4.
. Swift
, Bool
: .
true, false.
( 4.28).
4.28
1
2
3
4
//
var isDragon = true
//
let isTroll: Bool = false
true
false
Swift, Bool , .
Swift Bool, , , , i = 1
i=true . Xcode .
Bool if
else,
( 4.29).
4.29
1
2
3
4
5
6
7
8
//
var isDragon = true
//
if isDragon {
print(", !")
}else{
print(", !")
}
true
", !\n"
:
, !
, , !,
. -
4 63
if-else , ,
.
isDragon false,
, !.
- . Swift
:
(!a);
(a && b);
(a || b).
. , true,
false, . !a
a ( 4.30).
4.30
1 var someBool = true
2 //
3 !someBool
true
false
someBool true.
someBool. .
. true, true.
false, false ( 4.31).
4.31
1
2
3
4
5
true
false
false
64 II. Swift
, .
, .
. true,
true. false, false ( 4.32).
4.32
1
2
3
4
5
true
true
false
, .
,
( 4.33).
4.33
1 let firstBool = true, secondBool= false, thirdBool = false
2 var resultBool = firstBool && secondBool || thirdBool
3 var resultAnotherBool = thirdBool || firstBool && firstBool
false
true
Swift , ,
..
,
. Swift . , ,
(4.34).
4.34
1 let firstBool = true, secondBool= false, thirdBool = true
2 var resultBool = firstBool && (secondBool || thirdBool)
3 var resultAnotherBool = (secondBool ||
(firstBool && thirdBool)) && thirdBool
true
true
4 65
. , ,
.
1. .
true, false.
2. .
3. .
4. .
Xcode:
( ( true && false ) || true )
true && false && true || ( true || false )
false || ( false || true ) && ( true && false )
4.5.
Swift
. ,
.
typealias.
, ( 4.35).
4.35
1
2
3
4
5
// UInt8
typealias ageType = UInt8
/* UInt8,
*/
var myAge: ageType = 29
myAge ,
UInt8.
.
( 4.36).
66 II. Swift
4.36
1
2
3
4
5
6
7
8
9
// String
typealias textType = String
typealias wordType = String
typealias charType = String
//
var someText: textType = " "
var someWord: wordType = ""
var someChar: charType = ""
var someString: String = " String"
" "
""
""
" String"
String .
.
,
. ,
(4.37).
4.37
1
2
3
4
5
//
typealias ageType = UInt8
/*
UInt8 */
var maxAge = ageType.max
255
Swift
. . maxAge UInt8.
, .
typealias,
( ) ,
.
.
1. .
2. Double
.
4 67
3. Int
.
4. . :
= [] / []2
4.6.
Swift
. , Bool.
:
==
(a == b ) true ,
.
!=
(a != b) true,
.
>
(a > b) true,
.
<
(a < b) true,
.
>=
(a >= b) true,
.
<=
(a <= b) true,
.
, .
, , 4.38.
68 II. Swift
4.38
1 // "1 2"
2 1 > 2
3 // false,
4 // "2 2"
5 2 != 2
6 // false,
7 // "1 1 "
8 (1+1) < 3
9 // true,
10 // "5 1"
11 5 >= 1
12 // true,
false
false
true
true
.
Swift !
,
.
III
Swift
, Swift
. . ,
, : .
, ,
Swift,
!
99 5.
99 6.
99 7.
99 8. .
99 9.
99 10. .
99 11.
99 12.
, , (tuples),
, Swift.
5.1.
, . ,
.
, .
: , ( 5.1).
5 71
5.1
1 /* ,
2 ,
3
4 */
5 let myProgramStatus = (200, "In Work", true) (.0 200, .1 "In Work",
.2 true)
6 myProgramStatus
(.0 200, .1 "In Work",
.2 true)
myProgramStatus ,
,
:
200 Int;
"In work" String;
true Bool.
: Int, String Bool.
,
.
: ,
?
, .
(Int, String, Bool),
.
, , , (Bool,
String, Int) .
.
, ,
(5.2).
5.2
1 /*
2 */
3 let myProgramStatus: (Int, String,
Bool) = (200, "In Work", true)
4 myProgramStatus
72 III. Swift
, .
,
, . ,
( )
(5.3).
5.3
1
2
3
4
5
6
7
// Int
typealias numberType = Int
//
let numbersTuple: (Int, Int, numberType,
numberType)
//
numbersTuple = (0, 1, 2, 3)
numbersTuple
(.0 0, .1 1, .2 2, .3 3)
(.0 0, .1 1, .2 2, .3 3)
numberTuple , .
5.2.
, . Swift
.
.
, , var let,
()
(5.4).
5.4
1
2
3
//
let myProgramStatus = (200, "In Work", (.0 200, .1 "In Work",
true)
.2 true)
//
5 73
4
5
6
7
8
" - 200\n"
" - In Work\n"
" - true\n"
- 200
- In Work
- true
, , ,
(5.5).
5.5
1
2
3
4
5
6
/*
*/
var (myName, myAge) = ("", 140)
//
print(" \(myName),
\(myAge) ")
" ,
140 \n"
:
, 140
myName myAge
("", 140).
. ,
, ,
.
5.6.
5.6
1
2
3
4
5
6
7
//
let myProgramStatus: (Int, String,
(.0 404, .1 "Error",
Bool) = (404, "Error", true)
.2 true)
/*
*/
var (statusCode, _, _) = myProgramStatus
//
print(" - \(statusCode)")
" - 404\n"
74 III. Swift
:
404
statusCode myProgramStatus.
.
Swift
. , . .
,
( 5.7).
5.7
1
2
3
4
5
6
//
let myProgramStatus: (Int, String, Bool) =
(200, "In Work", true)
//
print(" - \(myProgramStatus.0)")
print(" \(myProgramStatus.1)")
print(" \(myProgramStatus.2)")
:
- 200
- In Work
- true
.
. . N
0, N 1.
,
.
5 75
. : ,
(5.8).
5.8
1
. , .
.
. 5.9
myProgramStatus.
5.9
1
2
3
4
//
print(" - \(myProgramStatus.
statusCode)")
print(" - \(myProgramStatus.
statusText)")
print(" - \
(myProgramStatus.2)")
" - 200\n"
" - In
Work\n"
" true\n"
:
200
- In Work
true
,
.
, myProgramStatus, ,
,
(5.10).
5.10
1
2
3
4
/*
*/
let myProgramStatus: (statusCode: Int,
statusText: String, statusConnect: Bool) =
(200, "In Work", true)
(.0 200, .1
"In Work", .2 true)
76 III. Swift
5 /*
6
7 */
8 myProgramStatus.statusCode
9 /*
10
11 */
12 let myNewProgramStatus = (statusCode: 404,
statusText:"Error", statusConnect:true)
13 /*
14
15 */
16 myNewProgramStatus.statusText
200
"Error"
( 5.11).
5.11
1
2
3
4
5
6
7
//
var myFirstTuple: (Int, String)
//
var mySecondTuple = (100, "")
//
myFirstTuple = mySecondTuple
myFirstTuple
myFirstTuple mySecondTuple , .
,
.
,
, (
5.12).
5.12
1
2
3
4
5
6
//
var someTuple: (200, true)
//
var someTuple.0 = 404
var someTuple.1 = false
someTuple
5 77
, , , , .
, , .
,
.
- (), , . IV .
1. : ,
.
.
2.
.
3. , , ( ).
4. ( ).
5. , ,
.
Swift, , ,
.
6.1.
, ,
, ,
,
.
- .
, String,
.
.
. ,
.
(x, y). . . , ,
,
. (, ..), ,
, .
. - Int, Int(). -
6 79
.
: , "1945"
, ", !"
(6.1).
6.1
1 //
2 let possibleString = "1945"
3 /*
4 */
5 let convertPossibleString = Int(possibleString)
6 //
7 let unpossibleString = ", !"
8 /*
9 */
10 let convertUnpossibleString = Int(unpossibleString)
"1945"
1 945
",
!"
nil
Int()
, ,
(Int ),
.
( , ).
Int Int?.
, Bool, String,
Float Double.
Swift , , nil ,
.
,
, nil. (6.2).
6.2
1
2
3
4
5
/* Int
*/
var dragonAge: Int? = 230
//
dragonAge = nil
230
nil
80 III. Swift
dragonAge
. ,
( Int ).
dragonAge , . nil,
dragonAge .
Swift nil . , , , Swift nil.
, Optional(), 6.3.
6.3
1
2
3
4
5
6
//
var optionalVar = Optional ("stringValue")
"stringValue"
optionalVar
"stringValue"
//
optionalVar = nil
nil
optionalVar
nil
Optional() String,
.
,
.
6.2.
, ,
, .
, : Int? Int, String? String, Bool? Bool
, , .
6 81
, . , Int?
(6.4).
6.4
1 /*
2 */
3 var trollAge: Int? = 95
5 trollAge = trollAge + 10 //
95
Swift , (forced
unwrapping).
(
) , Int? Int.
( ), .
, ,
(6.5).
6.5
1
2
3
4
5
6
/*
*/
var trollAge: Int? = 95
//
trollAge = trollAge! + 10
trollAge
95
105
105
trollAge Int, .
trollAge! + 10 ,
Int trollAge.
,
-
, nil. ,
Xcode .
82 III. Swift
Swift
(implicitly unwrapping).
,
nil,
, .
.
, (,
Int! Int?). 6.6
.
6.6
1
2
3
4
5
6
7
8
9
( nil)
Xcode (6.7).
6.7
1 let pointCoordinates: (Int, Int)? = nil
2 coordinates = pointCoordinates! //
.
, ,
,
.
Swift , ,
(assertions).
.
, .
assert(),
.
:
;
.
, assert() ,
. true,
; false, . Xcode,
, Xcode .
, :
, ,
.
(7.1).
84 III. Swift
7.1
1
2
3
4
5
6
7
/*
*/
var dragonAge = 230
//
assert( dragonAge >= 225, "
, " )
//
dragonAge
230
230
. 7.1.
, ( 7.2).
7.2
1
2
3
4
5
6
7
/*
*/
var dragonAge = 230
//
assert( dragonAge >= 225 )
//
dragonAge
230
230
7 85
, true, ,
false. , assert()
, - .
( ) nil (7.3).
7.3
1
2
3
4
//
var isDragon: Bool? = true
//
assert( isDragon != nil, " " )
true
isDragon ( nil),
.
,
.
.
: ,
, . , :
, ..
. Swift , , , ,
,
.
Swift, . ,
.
8.1. if
if
, ,
. , ., ,
.
.
8 . 87
if _ {
//
}
if, . , .
.
.
, . Swift
Bool,
. , , , if, Bool.
8.1.
8.1
1
2
3
4
5
6
// Bool
var logicVar = true
//
if logicVar {
print(" logicVar ")
}
:
logicVar
if
logicVar. , ,
, ,
.
logicVar false,
print() .
, Swift .
true, false, .
, Xcode
(8.2).
8.2
1 var intVar = 1
2 if intVar { //
3
// ...
4 }
88 III. Swift
,
( 8.3).
8.3
1
2
3
4
5
6
// Bool
var logicVar = false
//
if !logicVar {
print(" logicVar ")
}
:
logicVar
logicVar
, if , .
if,
,
. Swift ,
. if.
if _ {
//
} else {
//
}
.
,
else.
8.4 if.
8.4
1
2
3
4
5
// Bool
var logicVar = false
//
if logicVar {
print(" logicVar ")
8 . 89
6 } else {
7
print(" logicVar ")
8 }
:
logicVar
.
, .
(8.5).
8.5
1
2
3
4
5
6
7
8
9
// Bool
var firstLogicVar = true
var secondLogicVar = false
//
if firstLogicVar || secondLogicVar {
print(" ")
} else {
print(" ")
}
true,
true, if
.
if
, if,
.
if _1 {
// ...
} else if _2 {
// ...
} else {
// ...
}
,
. -
90 III. Swift
. , .
else.
else if , else .
8.6 .
8.6
1 // Bool
2 var firstLogicVar = true
3 var secondLogicVar = true
4 //
5 if firstLogicVar && secondLogicVar {
6
print(" ")
7 } else if firstLogicVar || secondLogicVar {
8
print(" ")
9 } else {
10
print(" ")
11 }
, ,
. (|| )
, true, ( )
.
Bool. Swift . :
if . ,
.
, , .
, ,
:
5,
1000 .
5 7,
800 .
8 . 91
7,
500 .
, ,
if-else ( 8.7).
.
8.7
1 //
2 var tenantCount = 6
3 //
4 var rentPrice = 0
5 /*
6 */
7 if tenantCount < 5 {
8
rentPrice = 1000
9 } else if tenantCount >= 5 && tenantCount <= 7 {
10
rentPrice = 800
11 } else {
12
rentPrice = 500
13 }
14 //
15 var allPrice = rentPrice * tenantCount
6
0
800
4 800
.
.
if-else, rentPrice 800.
4800.
Swift
if .
.
_ ? 1 : 2
.
. .
.
.
92 III. Swift
8.8.
8.8
1
2
3
4
5
//
let a = 1
let b = 2
//
a <= b ? print("A B"):print("A B")
:
A
, .
, , . (8.9).
8.9
1
2
3
4
5
6
7
8
// Int
var height = 180
180
// Bool
var isHeader = true
true
//
let rowHeight = height + (isHeader ? 20 : 10 ) 200
//
rowHeight
200
, isHeader.
height rowHeight.
if
,
. , .
if ,
.
8 . 93
if-else
, ,
, , (8.10).
, trollsCount.
, .
, .
8.10
1 /*
2 */
3 var trollsCount: Int? = 8
4 //
5 if trollsCount == nil {
6
print(" ")
7 } else {
8
//
9
var potCountForTroll = 2
10
//
11
var allPotsCount = potCountForTroll * trollsCount!
12 }
2
10
assert(),
nil.
, allPotsCount
trollsCount.
,
nil, , nil .
if-else
. , . nil,
.
(optional
binding).
94 III. Swift
if var __ = _ {
1
} else {
2
}
var let.
( ).
if-else.
nil,
if . else,
, .
nil, , ( ),
if
. , .
,
. , . ,
( ), .
.
( 8.11).
8.11
1 /*
2 */
3 var monstersCount: Int? = 8
4 //
5 var monsters = 0
6 //
7 if var monsters = monstersCount {
8
print(" \(monsters) ")
9 } else {
10
print(" ")
11 }
12 monsters
8
0
" 8 \n"
:
8
, if, monstersCount,
8 . 95
,
monsters.
, monsters, , monsters,
, . ,
,
, . monsters ,
.
monstersCount ,
else.
Int(). ,
Int. , .
,
.
.
. ,
(, ,
) (
8.12).
8.12
1 /* String,
2
3 */
4 var coinsInNewChest = "140"
"140"
5 /* Int,
6
7 */
8 var allCoinsCount = 1301
1 301
9 //
10 if Int(coinsInNewChest) != nil{
11
allCoinsCount += Int(coinsInNewChest)!
1 441
12 } else {
13
print(" ")
14 }
Int() :
if nil coinsInNewChest.
allCoinsCount if.
96 III. Swift
,
.
, ,
.
Int(). 8.13.
8.13
1 /* String,
2
3 */
4 var coinsInNewChest = "140"
5 /* Int,
6
7 */
8 var allCoinsCount = 1301
9 /*
10 */
11 var coins = Int(coinsInNewChest)
12 /*
13 */
14 if coins != nil{
15
allCoinsCount += coins!
16 } else {
17
print(" ")
18 }
"140"
1 301
140
1 441
, : coins
( , )
,
.
,
, .
,
,
(8.14).
8.14
1 /* String,
2
3 */
4 var coinsInNewChest = "140"
"140"
8 . 97
5 /* Int,
6
7 */
8 var allCoinsCount = 1301
9 /*
10 */
11 if var coins = Int(coinsInNewChest){
12
allCoinsCount += coins
13 } else {
14
print(" ")
15 }
1 301
1 441
, , . , ,
, Swift
.
1. String Text.
2. Text.
, .
3. ,
, .
Int().
4. (numberOne: Text?, numberTwo:
Text?)? TupleType. .
5. TupleType, : ("190", "67"), ("100", nil) , ("-65", "70").
6. ,
nil.
8.2. guard
guard . if, . , ,
, , false.
98 III. Swift
guard else {
//
}
guard .
true, guard .
false, .
:
return, break, continue, throw (
).
8.3.
. Swift ,
(, 1, 2, 3, 4), (, 1 4).
(range operators).
Swift :
: a...b ,
a b ( a b). ,
1...4 1, 2, 3, 4.
: a..<b a b
( a). ,
2..<5 2, 3, 4.
.
8.4. switch
. ,
if,
else-if . -
8 . 99
.
Swift switch, ,
if,
. , switch
. .
switch
switch
if-else
( 8.15).
, .
8.15
1 /* Int
2 ,
3 */
4 var userMark = 4
5 /* if-else
6
7 userMark
8 */
9 if userMark == 1 {
10
print(" ! !")
11 } else if userMark == 2 {
12
print(" !")
13 } else if userMark == 3 {
14
print(" !")
15 } else if userMark == 4 {
16
print(", ")
17 } else if userMark == 5 {
18
print(" !")
19 }
:
,
if
, , true.
, switch,
,
.
switch _ {
case 1:
1
case 2, 3:
2
...
case M:
break
default:
N
}
switch, switch-case,
case.
case .
case ,
. ,
.
case , .
, ,
1. .
case , N- , default.
, , case. else if-else.
default switch-case.
switch-case ,
if-else .
case break,
.
, case default .
, case,
switch.
switch-case ,
.
default. , break.
switch-case ( 8.16).
8 . 101
8.16
1 /* Int
2 ,
3 */
4 var userMark = 4
5 /* if-else
6
7 userMark
8 */
9 switch userMark {
10
case 1:
11
print(" ! !")
12
case 2:
13
print(" !")
14
case 3:
15
print(" !")
16
case 4:
17
print(", ")
18
case 5:
19
print(" !")
20
default:
21
break
22 }
:
,
switch
userMark case
.
, switch-case .
switch Swift . , .
. , , case
( 8.17).
8.17
1 /* Int
2 ,
3 */
4 var userMark = 4
:
!
fallthrough
, , case, switch-case.
switch-case, case.
case fallthrough
( 8.18). ,
: , . ,
.
. , (
).
8.18
1 /* Character
2
3 */
4 var level: Character = ""
5 //
8 . 103
6 switch level {
7
case "":
8
print(" ")
9
fallthrough
10
case "":
11
print(" ")
12
fallthrough
13
case "":
14
print(" ")
15
default:
16
break
17 }
"" level ,
"" "", fallthrough, ,
"".
where
case ,
. case
. Swift case
, - . where case.
. .
:
1: 2 .
2: 2 .
3: 2 .
( ) . switch
.
, ,
if-else , ,
switch-case .
,
.
switch-case where (
8.19).
8.19
1 /* Float
2 */
3 var dragonWeight: Float = 2.4
4 /* Float
5 */
6 var dragonColor = ""
7 //
8 switch dragonColor {
9
case "" where dragonWeight < 2:
10
print(" 1")
11
case "" where dragonWeight < 2:
12
print(" 2")
13
case "", "" where dragonWeight >= 2:
14
print(" 3")
15
default:
16
break
17 }
:
3
where case , ,
true false.
case ,
where true.
where
switch .
case
.
(8.20).
8.20
1 var userMark = 4
2 switch userMark {
3
case _ where userMark>1 && userMark<3:
8 . 105
4
5
6
7
8
9 }
print(" !")
case _ where userMark >= 3:
print(" !")
default:
assert(false, " \(userMark)
")
:
!
case,
, where .
switch
switch
. ,
. Swift
switch-else . case , , , .
.
.
.
dragonColor dragonWeight ,
where .
(8.21).
8.21
1
2
3
4
5
6
7
/* (String, Int)
*/
var dragonCharacteristic = ("", 2.4)
//
switch dragonCharacteristic {
case ("", 0..<2):
print(" 1")
:
1
case
, ,
.
2 , (
) where.
switch ,
, ( ).
,
( )
where.
8.22.
8.22
1 /* (String, Int)
2 */
3 var dragonCharacteristic = ("", 2.4)
4 //
5 switch dragonCharacteristic {
6
case ("", 0..<2):
7
print(" 1")
8
case ("", 0..<2):
9
print(" 2")
10
case ("", let weight) where weight >= 2:
11
print(" 3")
12
case ("", let weight) where weight >= 2:
13
print(" 3")
8 . 107
14
15
16 }
default:
print(" ")
:
3
( 2 ), case :
, . ,
Swift
case. , :
case ("", let weight), ("", let weight) where weight >= 2:
case.
,
case, ,
, - , .
, 510
. case
.
-,
( 8.23).
8.23
1 /* (String, Int)
2 */
3 var dragonCharacteristic = ("", 2.4)
4 //
5 switch dragonCharacteristic {
6
case ("", 0..<2):
7
print(" 1")
8
case ("", 0..<2):
9
print(" 2")
10
case let(color, weight) where (color == "" || color ==
"") && weight >= 2:
11
print(" 3")
12
default:
13
print(" ")
14 }
:
3
, let ( var)
, . , , where ,
case.
String, ().
, . .
. switch . .
1. Operation , : operandOne,
operandTwo, operation.
. .
Character.
.
: +, -, *, /.
2. Operation
, (3.1, 33, "+").
3. switch-case,
, operation .
switch .
4.
switch-case.
9.1.
,
. ,
, .
,
.
-.
Int
.
. , 5 ,
0, 4. .
. ,
. Swift
,
. ,
.
,
.
, var let.
(
) let ,
var.
9.1.
9.1
1
2
3
4
//
let alphabetArray = ["a", "b", "c"]
//
var mutableArray = [2, 4, 8]
: alphabetArray mu
tableArray. alphabetArray
String, mutableArray
Int. .
0,1 2.
- (value type), -
(reference type). , ,
( 9.2).
9.2
1 //
2 let unmutableArray = ["one", "two", "three"]
3 //
["one", "two",
"three"]
9 111
4 var newArray = unmutableArray
5 newArray
6 //
7 newArray[1] = "four"
8 //
9 unmutableArray
["one", "two",
"three"]
["one", "two",
"three"]
"four"
["one", "two",
"three"]
.
.
,
,
, .
, ,
. , :
.
.
( 9.3).
9.3
1 /* ,
2 c */
3 let a1 = 1
4 let a2 = 2
5 let a3 = 3
6 if [1, 2, 3] == [a1, a2, a3] {
7
print(" ")
8 } else {
9
print(" ")
10 }
, ( 9.4).
9.4
1
2
3
4
5
6
7
//
let alphabetArray = ["a", "b", "c"]
//
var mutableArray = [2, 4, 8]
//
alphabetArray[1]
mutableArray[2]
, , . .
, ( 9.5).
9.5
1
2
3
4
5
6
//
var mutableArray = [2, 4, 8]
//
mutableArray[1] = 16
//
mutableArray
[2, 4, 8]
16
[2, 16, 8]
, ,
.
, .
( 9.6).
9.6
1 //
2 var mutableArray = ["one", "two", "three", "four"] ["one", "two",
"three", "four"]
3 //
4 var subArray = mutableArray[1...2]
["two", "three"]
5 /*
9 113
6 */
7 mutableArray[1...2] = ["five"]
8 mutableArray
["five"]
["one", "five",
"four"]
Swift .
[1...2] ["five"]
. "four" , [3], [2],
.
, .
, Swift
. .
(
).
:
var : Array<>
:
var : []
,
.
[] ( )
Array<>. .
( ).
,
. , .
,
, ( 9.7).
.
[1, 2, 3, 4, 5]
["x", "y", "z"]
[1, 2, 3, 4, 5]
Xcode
.
,
, - . :
[].
( Int() ), , [].
9.8.
9.8
1
2
3
4
5
6
/*
*/
var emptyArray: [String] = []
/*
*/
var anotherEmptyArray = [String]()
[]
[]
emptyArray another
Empty
Array, ( ), , .
[]() ,
.
count, -
9 115
, repeatedValue, ( 9.9).
9.9
1 /*
2 */
3 var alphaArray = [String?]( count: 5, repeatedValue: nil)
nil, nil, nil, nil]
[nil,
[String?], nil.
[nil, nil, nil, nil, nil] .
repeatedValue
.
,
, . , , .
:
, .
.
(+), 9.10.
9.10
1 //
2 let charsOne = ["a", "b", "c"]
3 let charsTwo = ["d", "e", "f"]
4 let charsThree = ["g", "h", "i"]
5 //
6 var alphabet = charsOne + charsTwo
7 //
8 alphabet += charsThree
10 alphabet[8]
alphabet
.
, . , , .
.
9.11.
9.11
1 var arrayOfArrays = [[1,2,3], [4,5,6], [7,8,9]]
, [Int]
. arrayOfArrays
[[Int]] (
).
( 9.12).
9.12
1
2
3
4
5
[7, 8, 9]
7
arrayOfArrays[2]
arrayOfArrays. arrayOfArrays[1][2],
, ,
arrayOfArrays.
. Swift, ,
.
count (
9.13).
9 117
9.13
1 var someArray = [1, 2, 3, 4, 5]
2 //
3 someArray.count
[1, 2, 3, 4, 5]
5
[]
0
true
count ,
( 9.15).
9.15
1
2
3
suffix()
, . , ( 9.16).
9.16
1 var someArray = [1, 2, 3, 4, 5]
2 //
3 let subArray = someArray.suffix(3)
[1, 2, 3, 4, 5]
[3, 4, 5]
first last
( 9.17).
9.17
1
2
3
4
5
[1, 2, 3, 4, 5]
1
5
append()
( 9.18).
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
( ),
insert() ( 9.19).
9.19
1 var someArray = [1, 2, 3, 4, 5]
2 //
3 someArray.insert(100, atIndex: 2)
[1, 2, 3, 4, 5]
[1, 2, 100, 3,
4, 5]
,
.
, removeAtIndex() ,
removeFirst() removeLast() .
(9.20).
9.20
1 var someArray = [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
2 // ( 2)
3 someArray.removeAtIndex(2)
3
4 //
5 someArray.removeFirst()
1
6 //
7 someArray.removeLast()
5
8 /*
9 */
10 someArray
[2, 4]
. someArray
0 1.
( ), dropFirst() dropLast(),
,
.
, .
, ( 9.21).
9 119
9.21
1
2
3
4
5
6
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
[4, 5]
[1, 2, 3, 4, 5]
someArray, , .
contains() Bool (9.22).
9.22
1
2
3
4
[1, 2, 3, 4, 5, 6]
true
false
indexOf() . , (9.23).
, nil.
9.23
1 let intArray = [1, 2, 3, 4, 5, 6, 4, 5, 6]
2 //
3 let result = intArray.indexOf(4)
4 let resultNIL = intArray.indexOf(99)
[1, 2, 3, 4, 5, 6,
4, 5, 6]
3
nil
4 intArray
3. 99 intArray ,
nil.
minElement() maxElement(). ,
(9.24).
9.24
1 let intArray = [3, 2, 4, 5, 6, 4, 7, 5, 6]
2 //
[3, 2, 4, 5, 6, 4, 7,
5, 6]
2
7
, ,
.
. () .
hashValue .
:
var a: Float = 3.5
a.hashValue // 1 080 033 280
Swift Hashable.
, ,
.
, reverse(), 9.25.
9.25
1 var someArray = [1, 3, 5, 7, 9]
2 someArray.reverse()
[1, 3, 5, 7, 9]
ReverseRandomAccess
Collection<Array<Int>>
, reverse()
[Int], Reverse
Random
AccessCol
lec
tion. Swift. ,
,
.
9.2.
.
- ,
. ,
9 121
. , Swift
.
, .
, . - . , .
. ,
. 4 : "", "", ""
"" . ,
. ""
,
. ,
!
.
,
.
,
. , Swift
.
:
Set<>,
;
Set<>,
arrayLiteral,
.
Set<>.
, Set <>.
let,
var.
9.26 .
9.26
1 /* ,
2 */
3 var dishes: Set<String> = ["", "", {"", "",
"", ""]
"", ""}
4 /* ,
5 */
6 var dishesTwo: Set = ["", "",
{"", "",
"", ""]
"", ""}
7 /* ,
8
9 */
10 var members = Set<String>(arrayLiteral:
{"", " ",
"", " ", "")
""}
11 /* ,
12
13 */
14 var membersTwo = Set(arrayLiteral: "", {"", " ",
" ", "")
""}
, , ,
[].
( 9.27).
9.27
1 //
2 var dishes: Set<String> = ["", ""]
3 //
{"", ""}
9 123
4 var members = Set<String>()
5 //
6 dishes = []
[]
[]
, - ,
, .
insert(),
( 9.28).
9.28
1
2
3
4
//
var musicStyleSet: Set<String> = []
//
musicStyleSet.insert("Jazz")
[]
"Jazz"
remove(),
nil, .
removeAll()
( 9.29).
9.29
1
2
3
4
5
6
7
8
9
//
var musicStyleSet: Set<String> =
["Jazz", "Hip-Hop", "Rock"]
//
musicStyleSet.remove("Hip-Hop")
musicStyleSet
//
musicStyleSet.remove("Classic")
//
musicStyleSet.removeAll()
contains(). Bool ( 9.30).
9.30
1 //
2 var musicStyleSet: Set<String> = ["Jazz", "Hip-Hop", "Rock", "Funk"]
3 //
.
, , . Swift
.
9.31
(.9.1). , , .
9.31
1
2
3
4
5
6
//
let evenDigits: Set = [0, 2, 4, 6, 8]
//
let oddDigits: Set = [1, 3, 5, 7, 9]
//
let differentDigits: Set = [3, 4, 7, 8]
, .
. 9.1.
9 125
(.9.2):
(intersect).
( )
(exclusiveOr).
(union).
, ,
, (subtract).
. 9.2. ,
intersect() , , ( 9.32).
9.32
1 var inter = differentDigits.intersect(oddDigits).sort()
[3, 7]
, intersect() sort().
sort()
, .
, ,
.
exclusiveOr(), 9.33.
9.33
1 var exclusive = differentDigits.exclusiveOr
(oddDigits).sort()
[1, 4, 5, 8, 9]
union(), 9.34.
9.34
1 var union = evenDigits.union(oddDigits).sort()
[0, 1, 2, 3, 4,
5, 6, 7, 8, 9]
subtract() , ( 9.35).
9.35
1 var subtract = differentDigits.subtract(evenDigits).sort()
[3, 7]
.9.3 : aSet, bSet cSet. , . aSet
bSet,
. 9.3.
9 127
bSet. bSet ( )
aSet, bSet aSet. cSet bSet
, ,
aSet cSet , .
,
.
(==), 9.36.
9.36
1
2
3
4
5
6
7
8
//
var bSet: Set = [1, 3]
var copyOfBSet = bSet
/* bSet copyOfBSet
. */
if bSet == copyOfBSet {
print(" ")
}
, Set, .
isSubsetOf() ,
, bSet aSet ( 9.37).
9.37
1
2
3
4
5
:
bSet aSet
isSupersetOf() ,
( 9.38).
9.38
1
2
3
4
5
:
aSet bSet
isDisjointWith() ,
, true (
9.39).
9.39
1
2
3
4
5
:
bSet cSet
isStrictSubsetOf() isStrictSupersetOf() , ,
( 9.40).
9.40
1
2
3
4
5
6
7
8
:
bSet - aSet
aSet - bSet
9.3.
, .
,
, . -
9 129
( ),
, . .
String. , , , .
,
, .
,
, , ,
.
.
9.41.
9.41
1 var dictionary = ["one":"", "two":"", "three":""]
, . ,
,
( 9.42).
9.42
1 var countryDict = ["RUS":"", "BEL":
"", "UKR":""]
2 //
3 countryDict["BEL"]
4 //
5 countryDict["RUS"] = " "
6 countryDict
["BEL": "",
"UKR": "",
"RUS": ""]
""
"
"
["BEL": "",
"UKR": "",
"RUS": "
"]
Swift .
countryDict
RUS.
updateValue(). 9.43,
( nil, ).
9.43
1 var countryDict = ["RUS":"", "BEL":
"", "UKR":""]
2 //
3 countryDict.updateValue(value: "
", forKey: "RUS")
4 countryDict
["BEL": "",
"UKR": "",
"RUS": ""]
""
["BEL": "",
"UKR": "",
"RUS": "
"]
updateValue forKey,
.
, .
9 131
, ,
( 9.44).
9.44
1 var countryDict = ["RUS":"", "BEL":
"", "UKR":""]
2 //
3 countryDict["TUR"] = ""
4 countryDict
["BEL": "",
"UKR": "",
"RUS": ""]
""
["BEL": "",
"UKR": "",
"RUS": "",
"TUR": ""]
( )
nil remo
veVa
lueForKey, ( 9.45).
9.45
1 var countryDict = ["RUS":"", "BEL":
"", "UKR":""]
2 //
3 countryDict["UKR"] = nil
4 countryDict.removeValueForKey("BEL")
5 countryDict
["BEL": "",
"UKR": "",
"RUS": ""]
nil
""
["RUS": ""]
removeValueForKey
.
, Swift nil .
,
( 9.46).
9.46
1 var countryDict = ["RUS":"
", "BEL":"", "UKR":""]
2 //
3 let myCountry: String = countryDict["RUS"]!
["BEL": "",
"UKR": "",
"RUS": "
"]
"
"
country
Dict["RUS"] String? String .
:
. , ,
, .
var _: Dictionary<:>
var _: [:]
[:] ( ) Dictionary<: >.
.
, , .
, . [:], ,
( 9.47).
9.47
1 var emptyDictionary: [String:Int] = [:]
[:]
2 var AnotherEmptyDictionary: Dictionary<String,Int> = [:]
[:]
[:] , (
9.48).
9.48
1 var countryDict = ["RUS":"
","BEL":"", "UKR":""]
2 countryDict = [:]
3 countryDict
["BEL": "",
"UKR": "",
"RUS": "
"]
[:]
[:]
9 133
,
. ,
. , , Swift ,
.
, ,
. .
.
count (
9.49).
9.49
1 var someDictionary = [1, 2, 3, 4, 5]
2 //
3 someDictionary.count
[1, 2, 3, 4, 5]
5
[]
0
true
keys values ( 9.51).
9.51
1 var countryDict = ["RUS":"
["BEL": "",
", "BEL":"", "UKR":""] "UKR": "",
"RUS": "
"]
2 // countryDict
3 var keys = countryDict.keys
LazyMapCollection
<Dictionary<String,
String>, String>
4 // countryDict
5 var values = countryDict.values
LazyMapCollection
<Dictionary<String,
String>, String>
1. Chessman [String:(alp
ha:Character,num:Int)?].
.
, , , .
nil, ,
( ).
2. Chessmans Chessman ,
.
3. if-else, ,
( Chessmans), ,
.
4.
.
5. ,
.
10
, , , .
,
.
. Swift : for, while repeat
while. .
- ,
.
.
10.1. for
for .
Swift : for for-in.
for
for _; _; {
_
}
, for,
, .
:
1. _, .
2. _,
false , .
true, _, .
3. _ ,
, .
4. , 2.
C- , .
10.1.
10.1
1 for var i=0; i<5; i++ {
2
print(i)
3 }
(5 times)
:
0
1
2
3
4
for i,
0. i<5.
, , i .
i++, i .
.
, i<5,
. .
, i<5
false. .
:
0 4.
( for)
, , .
,
for ( 10.2).
10 . 137
10.2
1
2
3
4
5
6
var i = 0
for i; i<5; ++i {
i++
print(i)
}
i
0
(3 times)
(3 times)
6
:
1
3
5
i , for, .
for
(10.3).
10.3
1 var myArray = ["RUS", "UK", "USA"]
2 for var i = 0; i < myArray.count; i++ {
3
print(myArray[i])
4 }
:
RUS
UK
USA
i .
0,
i, , 0.
count, .
.
, for ,
(10.4).
10.4
1 var mySports = ["Football": "",
"Polo":"", "Golf":""]
["Football":
"", "Golf":
"", "Polo":
""]
,
,
.
for-in
for in {
_
}
for-in _ .
, . .
, _, .
for-in, for, .
.
10.5. 1 10
.
10.5
1
2
3
4
5
var totalSum = 0
for i in 1...10 {
totalSum += i
}
totalNum
0
(10 times)
55
10 . 139
for ,
i. 1...10, 1, .
i
. .
i, Swift
var.
, for-in,
.
,
( 10.6).
10.6
1
2
3
4
5
6
7
var totalNum = 0
var i = 0
for var i in 1...10 {
totalNum += i
}
totalNum
i
0
0
(10 times)
55
0
i , i .
for-in .
in ( 10.7).
10.7
1 var myMusicStyles = ["Rock", "Jazz", "Pop"]
2 for musicName in myMusicStyles {
3
print(" \(musicName)")
4 }
:
Rock
Jazz
Pop
musicName
, myMusicStyles.
,
, ?
( 10.8).
10.8
1
2
3
4
,
for, !
,
, .
, ,
( 10.9).
10.9
1
2
3
4
.
Swift enumirate(), , forin
( 10.10).
10 . 141
10.10
1 var myMusicStyles = ["Rock", "Jazz", "Pop"]
2 for (index, musicName) in myMusicStyles.enumerate() {
3
print("\(index+1). \(musicName)")
4 }
:
1. Rock
2. Jazz
3. Pop
( String) ,
.
characters.
for-in. 10.11
String
.
10.11
1 let myName = "Troll"
2 for oneChar in myName.characters {
3
print(oneChar)
4 }
:
T
r
o
l
l
, . 10.12
,
.
,
, .
.
10.12
1
2
3
//
var resultsOfGames = ["Red Wings":["2:1","2:3"],
"Capitals":["3:6","5:5"],"Penguins":["3:3","1:2"]]
//
Capitals - 3:6
Capitals - 5:5
Red Wings - 2:1
Red Wings - 2:3
Penguins - 3:3
Penguins - 1:2
resultsOfGames Dictio
nary<String: Dictionary <String>>. teamName ,
for-in,
.
10.2. while
repeatwhile
while repeat while
, .
for if.
while
while {
_
}
while, .
. true, _. . .
, , false.
, , , .
10 . 143
while 10.13,
1 10 .
10.13
1 //
2 var i = 1
3 //
4 var resultSum = 0
5 //
6 while i <= 10 {
7
resultSum += i
8
i++
9 }
10 resultSum
1
0
(10 times)
(10 times)
55
i .
.
i ,
10, , ,
false, .
while ,
, .
repeat while
while repeat while
.
, .
Swift repeat while do while.
repeat {
_
} while
repeat, .
while .
1
0
(10 times)
(10 times)
55
10.3.
Swift, ,
, ,
break continue.
continue
continue ,
. 10.15 , 1
10, , .
10.15
1 for i in 1...10 {
2
if i%2 == 0 {
3
continue
4
} else {
5
print(i)
6
}
7 }
:
1
3
5
7
9
10 . 145
. ,
, .
continue.
break
break . . 10.16
1 10. 5,
.
10.16
1 import Foundation
2 for i in 1...10 {
3
var randNum = Int(arc4random_uniform(10))
4
if randNum == 5 {
5
print(" \(i)")
6
break
7
}
8 }
:
7
, , .
Foundation,
arc4random_uniform(),
. import, Xcode
, arc4random_uniform() . Uint32 0
UInt32.
UInt32, Int .
, .
,
, Swift
( 10.17).
10.17
1 mainLoop: for i in 1...5 {
2
for y in i...5 {
3
if y == 4 && i == 2{
4
break mainLoop
5
}
6
print("\(i) - \(y)")
7
}
8 }
:
1
1
1
1
1
2
2
1
2
3
4
5
2
3
,
.
,
break continue .
1
, . .
1. ,
.
, ,
.
[String:[String:UInt]].
. , .
10 . 147
2.
.
2
9, if-else, .
,
, , Chessmans.
11
. Swift.
.
, .
. Swift. ,
. - Swift
, , .
11.1.
, .
.
,
.
11 149
.
. :
func myFirstFunc
.
, . , , , . ,
.
( ). :
func myFirstFunc
(someValue: Int, anotherValue: String)
(->),
. ,
. :
func myFirstFunc
(someValue: Int, anotherValue: String)
-> String
:
func myFirstFunc
(someValue: Int, anotherValue: String)
-> [(String,Int)?]
. - ,
return,
.
return . :
func myFirstFunc
(someValue: Int, anotherValue: String)
-> String {
return String(someValue) + anotherValue
}
. ,
.
:
func myFirstFunc (someValue: Int) -> String {
return String(someValue)
}
, . ,
.
(11.1).
11.1
1
2
3
4
5
printMessage(),
. printMessage()
- .
.
,
Void. C- .
Void
, , . :
func printMessage() -> () {
print(" ")
}
, , .
:
11 151
func printMessage() {
print(" ")
}
11.2.
.
.
, , , (3,14)
. . ,
.
.
, , ( 11.2). ,
.
11.2
1
2
3
4
5
6
:
200
404
printCodeMessage()
requestCode. .
.
. ,
.
, ,
. 11.3 ,
,
.
11.3
1 func sum(a:Int, b: Int, c:Int) -> () {
2
print(" - \(a+b+c)")
3 }
4 sum(10, b: 51, c: 92)
:
- 153
a ,
.
,
.
, , Xcode, .
.
Swift, .
, (11.4).
11.4
1 func sum(a:Int, _ b: Int, c:Int) -> () {
2
print(" - \(a+b+c)")
3 }
4 sum(15, 12, c: 9)
:
- 36
11 153
, b
.
. .
var
, , ( 11.5).
11.5
1 func generateString(code: Int, var _ text: String)
2 -> String {
3
text += String(code)
4
return text
5 }
6 generateString(200, ":")
":200"
generateString() text.
var ,
, .
. .
,
, ,
.
,
.
, inout.
, ,
.
(& ), ,
. 11.6
.
45
150
:
200
404
: a b.
,
.
. , .
. , -
,
(11.7).
11.7
1
2
3
4
5
6
:
" " 200
11 155
generateString() String.
return .
print()
String, .
,
,
print() .
, .
, , .
(...) .
.
11.8. ,
.
, .
,
.
11.8
1
2
3
4
5
6
7
8
9
:
- 600 800 301
- 101 200
codes
. ,
for-in.
.
.
, .
. 11.9
, , .
11.9
1 func getCodeDescription(code: Int) -> (Int, String){
2
let description: String
3
switch code {
4
case 1...100:
5
description = "Error"
6
case 101...200:
7
description = "Correct"
8
default:
9
description = "Unknown"
10
}
11
return (code, description)
12 }
13 print(getCodeDescription(150))
:
(150, "Correct")
getCodeDescrip
tion() , : .
getCodeDescription() ,
, (
11.10).
11.10
1 func getCodeDescription(code: Int)
2 -> (code: Int, description: String){
3
let description: String
4
switch code {
5
case 1...100:
11 157
6
description = "Error"
7
case 101...200:
8
description = "Correct"
9
default:
10
description = "Unknown"
11
}
12
return (code, description)
13 }
14 let request = getCodeDescription(48)
15 request.description
16 request.code
"Error"
getCodeDescription()
request,
description code, .
,
. , .
: 50 5000 . ,
( 11.11).
11.11
1 func sumWallet( wallet: [Int] ) -> Int {
(2 times)
2
var sum = 0
3
for oneBanknote in wallet {
4
sum += oneBanknote
(19 times)
5
}
6
return sum
(2 times)
7 }
8 //
9 var wallet = [50, 100, 100, 500, 50, 1000, [50, 100, 100, 500, 50,
5000, 50, 100]
1 000, 5 000, 50, 100]
10 //
11 sumWallet(wallet)
6 950
12 //
13 wallet.append(1000)
[50, 100, 100, 500,
50, 1 000, 5 000, 50,
100, 1 000]
14 //
15 sumWallet(wallet)
7 950
sumWallet()
-.
Int, .
, , ,
- .
sumWallet() , -
( 11.12).
11.12
1 func sumWallet( wallet: [Int]? = nil ) -> Int? {
2
var sum = 0
3
if wallet == nil {
4
return nil
5
}
6
for oneBanknote in wallet! {
7
sum += oneBanknote
8
}
9
return sum
10 }
11 //
12 var wallet = [50, 100, 100, 500, 50, 1000, [50, 100, 100, 500,
5000, 50, 100]
50, 1 000, 5 000, 50,
100]
13 //
14 sumWallet(wallet)
6 950
15 sumWallet()
nil
,
. .
wallet [Int] [Int]?.
. ,
, , ,
,
Int.
nil.
wallet ,
.
. ,
wallet (
nil), nil.
11 159
,
, .
(
11.13).
11.13
1 func sumWallet(banknotsArray wallet: [Int]? = nil ) ->
Int? {
2
var sum = 0
3
if wallet == nil {
4
return nil
5
}
6
for oneBanknote in wallet! {
7
sum += oneBanknote
8
}
9
return sum
10 }
11 //
12 sumWallet(banknotsArray: [50, 100, 100, 500, 50, 1000, 6 950
5000, 50, 100])
wallet banknotsArray,
sumWallet()
, .
,
. , ,
.
Swift ! ? ,
.
, .
, ,
. , , .
,
.
. generateWallet(),
. .
sumWallet() , , generateWallet(), (11.14).
11.14
1 import Foundation
2 //
3 func generateWallet(walletLength: Int)
4 -> [Int] {
5
//
6
let typesOfBanknotes = [50, 100, 500, 1000, 5000]
7
//
8
var wallet: [Int] = []
9
//
10
for _ in 1...walletLength {
11
let randomIndex = Int( arc4random_uniform(
UInt32( typesOfBanknotes.count-1 ) ) )
12
wallet.append( typesOfBanknotes[randomIndex] )
13
}
14
return wallet
15 }
16 //
11 161
17 func sumWallet(banknotsFunction wallet: (Int)->([Int]) )
18 -> Int? {
19
//
20
let myWalletArray = wallet( Int( arc4random_uniform(10) ) )
21
var sum: Int = 0
22
for oneBanknote in myWalletArray {
23
sum += oneBanknote
24
}
25
return sum
26 }
27 //
28 sumWallet(banknotsFunction: generateWallet)
2 700
, , ,
.
arc4random_uniform(), .
generateWallet() ,
. typesOfBanknotes
. :
typesOfBanknotes, - wallet,
.
for .
.
, . ,
.
wallet sumWallet()
generateWallet(). sumWallet() .
, , .
, , :
func someFunction(_:Int) -> () {}
someFunction(100)
, , -
. 11.15
.
11.15
1 //
2 func printText()
3 -> (String) {
4
return " "
5 }
6 // ,
7 func returnPrintTextFunction()
8 -> () -> (String) {
9
return printText
10 }
11
12 let newFunctionInLet = returnPrintTextFunction()
13 newFunctionInLet()
() -> String
"
"
returnPrintTextFunction()
() -> (String).
printText().
newFunc
tionInLet () -> (String),
, . ,
(.11.1).
. 11.1. ,
11.3.
. -
11 163
, .
. .
( 11.16).
11.16
1 //
2 let functionInLet = {return true}
3 functionInLet()
true
() -> Bool
.
,
.
- , ,
. .
-, .
:
let trueFunc = {return true}
let anotherTrueFunc = trueFunc
trueFunc anotherTrueFunc .
11.4.
, , .
,
. ,
. .
. .
,
,
( 11.17).
11.17
1 func oneStep(var coordinates: (Int, Int), stepType: String ) ->
(Int,Int) {
2
func up(inout coords: (Int, Int)) -> (Int,Int) {
3
return (coords.0+1, coords.1)
oneStep() .
, stepType.
oneStep().
11.5.
Swift (overloading) . ,
.
. 11.18 ,
.
11.18
1 func say(what: String){}
2 func say(what: Int){}
11 165
say(),
. ,
.
(
),
. 11.19.
.
11.19
1
2
3
4
5
6
func cry()
return
}
func cry()
return
}
-> String {
"one"
-> Int {
1
( 11.20).
11.20
1 let resultOfFunc = say()
Swift , ,
, .
Xcode .
- ,
,
(11.21).
11.21
1 let resultString: String = say()
2 let resultInt = say() + 100
11.6.
. . ,
. ,
,
.
.
11.22.
11.22
1 func countdown(firstNum num: Int) {
2
print(num)
3
if num > 0 {
4
//
5
countdown(num -1)
6
}
7 }
8 countdown(20)
,
firstNum .
.
1
2 . , Chessmans, chessAnalizer().
, Chessmans.
2
,
Chessmans. Chessmans ( ),
, ( String )
(
(Character, Int)?).
. ,
, .
12
. .
Apple Swift, (closures)
,
.
, . .
,
.
,
( C Objective-C), - .
12.1.
,
:
;
;
.
.
, - ( 12.1).
12.1
1 //
2 func handle100(wallet: [Int]) -> [Int] {
3
var returnWallet = [Int]()
handle100()
. handle100() ,
:
;
;
( ,
).
,
1000 (12.2).
12.2
1 func handleMore1000(wallet: [Int]) -> [Int] {
2
var returnWallet = [Int]()
3
for banknot in wallet {
4
if banknot>=1000{
5
returnWallet.append(banknot)
6
}
7
}
8
return returnWallet
9 }
10 var wallet = [10,50,100,100,5000,100,50,50,500,100]
11 handleMore1000(wallet)
, .
handle100() handleMore1000() . .
:
1. .
, .
12 169
2.
, . , .
,
. ( 12.3).
12.3
1 //
2 func handle(wallet: [Int], closure: (Int) -> Bool) -> [Int] {
3
var returnWallet = [Int]()
4
for banknot in wallet {
5
if closure(banknot) {
6
returnWallet.append(banknot)
7
}
8
}
9
return returnWallet
10 }
11 // 100
12 func compare100(banknot: Int) ->Bool {
13
return banknot==100
14 }
15 // 1000
16 func compareMore1000(banknot:Int) -> Bool {
17
return banknot>=1000
18 }
19 var wallet = [10,50,100,100,5000,100,50,50,500,100]
20 handle(wallet, closure: compare100)
21 handle(wallet, closure: compareMore1000)
handle() closure
if . Bool
.
,
handle()
.
,
.
12.2.
, ( ,
1000 , ,
100, ..).
. ,
, ,
, .
.
,
.
{ (_) -> in
__
}
.
in,
.
.
handle(), ( 12.4).
12.4
1
2
3
4
5
6
7
8
// 1000
handle(wallet, closure: {(banknot: Int) -> Bool in
return banknot>=1000
})
// 100
handle(wallet, closure: {(banknot: Int) -> Bool in
return banknot==100
})
compare100()
compareMore1000() ,
closure.
.
12 171
, , - , .
,
.
. closure handle() (
(Int) -> Bool),
( 12.5).
12.5
1
2
3
4
5
6
7
8
// 1000
handle(wallet, closure: {banknot in
return banknot>=1000
})
// 100
handle(wallet, closure: {banknot in
return banknot==100
})
in
,
wallet.
handle closure
banknot
.
12.3.
. Swift, .
,
( return),
. , return
(12.6).
// 1000
handle(wallet,
closure: {banknot in banknot>=1000})
// 100
handle(wallet,
closure: {banknot in banknot==100})
,
.
12.4.
. Swift
.
$_.
.
$0 .
$1, $2 ..
handle()
( 12.7).
12.7
1
2
3
4
5
6
// 1000
handle(wallet,
closure: {$0>=1000})
// 100
handle(wallet,
closure: {$0==100})
12 173
- (
handle(), closure ), Swift
( )
( 12.8).
12.8
1
2
3
4
5
6
// 1000
handle(wallet)
{$0>=1000}
// 100
handle(wallet)
{$0==100}
, , , ,
,
. 12.9 wallet, , ,
successbanknots, . , wallet
, successbanknot.
12.9
1 let successbanknot = [100, 500]
2 handle(wallet)
3 {banknot in
4
for number in successbanknot {
5
if number == banknot {
6
return true
7
}
8
}
9
return false
10 }
success
banknot ,
successbanknot,
. Swift
.
12.5. -
, ,
. , .
,
.
12.10,
closure ,
.
12.10
1 let closure : () -> () = {
2
print(" ")
3 }
4 closure()
, () -> ().
,
, .
(
),
.
: , ,
..
($0, $1 ..), 12.11.
12.11
1 var sum: (numOne: Int, numTwo:Int) -> Int = {
2
return $0 + $1
3 }
4 sum(numOne: 10, numTwo: 34)
, sum, Int .
12 175
,
. , .
.
12.6.
Swift, ( ),
.
( 12.12). ,
,
. ,
.
12.12
1
2
3
4
5
6
7
8
9
var a = 1
var b = 2
let closureSum : () -> Int = {
return a+b
}
closureSum()
a = 3
b = 4
closureSum()
, closureSum,
a b. .
, .
, ,
.
, , in.
closureSum
, a b ( 12.13).
, closureSum,
a b. .
12.7.
Swift , . sort(), ( , ).
, , .
, sort(),
Bool .
, . 12.14
myArray , . sort()
, true,
.
12.14
1 var array = [1,44,81,4,277,50,101,51,8]
2 array.sort({ (first: Int, second: Int) -> Bool in
3 return first < second
4 })
12 177
;
.
, 12.15.
,
myArray ,
. sort() , true,
.
12.15
1 var array = [1,44,81,4,277,50,101,51,8]
2 var sortedArray = array.sort({$0<$1})
.
Swift , , Bool.
. .
,
,
(12.16).
12.16
1 var array = [1,44,81,4,277,50,101,51,8]
2 var sortedArray = array.sort(<)
, Swift!
IV
Swift
Swift .
,
. , .
, , ,
.
Swift ,
( )
. , , , Swift .
: (enum), (struct) (class).
? ? . ,
. , , ,
, , ..
, -
, .
99 13.
99 14.
99 15.
99 16.
Swift 179
99 17.
99 18.
99 19.
99 20. Any AnyObject
99 21.
99 22. ARC
99 23.
99 24.
99 25.
99 26.
99 27.
99 28.
99 29.
13
- Swift.
.
, Swift.
, .
,
, , .
, , : , . , .
Swift
Pascal, Visual Basic, Python, PHP ..
13.1.
, : .
, .
( ) .
, . Apple Swift.
,
. , , Swift
.
13 181
, Automobile ().
.
- , , .
Automobile ,
(.13.1).
. 13.1.
, , ( )
. bmw
Automobile, ,
BMW.
. Automobile : , , ,
, .. . bmw
:
a.brand = "BMW"
a.type = "3"
a.maxSpeed = 210
a.engineCapacity = 1499
,
, :
.
, . , , ,
. Automobile
: , , :
a.startEngine()
a.accelerate()
a.beep()
, , .
.
- ().
. ,
Swift
.
13.2.
(namespaces) .
. ,
.
.
.
. , ,
. ,
.
13 183
, . .
,
. - .
, ,
, . .
, , ,
: import Foundation.
Cocoas Foundation Framework
, .
: , UIKit,
iOS-, Cocoas Foundation Framework.
14
.
.
Swift.
14.1.
, .
, ,
.
,
( 14.1).
,
String. .
14.1
1 var russianCurrency: String = "Rouble"
, ,
, -
,
. ,
?
(
14.2). , .
.
14 185
14.2
1 var currencyUnit: [String] = ["Rouble", "Dollar", "Euro"]
2 var russianCurrency = currencyUnit[0]
.
, .
(, , ),
. , , , , Apple Swift.
.
, . ,
.
enum {
case 1
case 2
...
}
enum,
. , ,
.
. .
case,
. .
.
, .
( 14.3). .
,
.
(14.4).
14.4
1 enum CurrencyUnit {
2
case Rouble, Dollar, Euro
3 }
CurrencyUnit
, - . , .
, , .
.
var = .
,
.
let :
= .
. .
,
( 14.5).
14.5
1
2
3
4
5
// 1
let roubleCurrency = CurrencyUnit.Rouble
// 2
let dollarCurrency: CurrencyUnit
dollarCurrency = .Dollar
Rouble
Dollar
CurrencyUnit,
CurrencyUnit.
14 187
- , String Int. currency1
currency2 :
var currency1 = CurrencyUnit.Rouble
var currency2 = "Rouble"
Swift Enum Value.
14.2.
, .
, ,
, .
.
CurrencyUnit,
, , , (14.6).
14.6
1 enum CurrencyUnit {
2
case Rouble(ountrys: [String], shortName: String)
3
case Dollar(ountrys: [String], shortName: String)
4
case Euro(ountrys: [String], shortName: String)
5 }
countrys , , : , .
, Cur
rencyUnit,
( 14.7).
14.7
1 var roubleCurrency: CurrencyUnit
2 roubleCurrency = .Rouble(ountrys:
["Russia"], shortName: "RUB")
Rouble(["Russia"], "RUB")
roubleCurrency Rouble . -
.
.
,
Dollar. , : , , .. ,
.
Dollar, ,
( 14.8).
14.8
1 // ,
2 enum DollarCountrys {
3
case USA
4
case Canada
5
case Australia
6 }
7 // ""
8 enum CurrencyUnit {
9
case Rouble(ountrys: [String], shortName: String)
10
case Dollar(ountrys: [String], shortName: String, national:
DollarCountrys)
11
case Euro(ountrys: [String], shortName: String)
12 }
13 var dollarCurrency: CurrencyUnit
14 dollarCurrency = .Dollar(ountrys: ["USA"], Dollar(["USA"], "USD",
shortName: "USD", national: .USA)
DollarCountrys.USA)
national CurrencyUnit
DollarCountrys. , .
DollarCountrys
CurrencyUnit ,
( 14.9).
14.9
1 // ""
2 enum CurrencyUnit {
3
// ,
4
enum DollarCountrys {
5
case USA
6
case Canada
7
case Australia
8
}
14 189
9
10
11
12 }
DollarCountrys
. , , .
,
CurrencyUnit ( 14.10).
14.10
1 var someVar: CurrencyUnit.DollarCountrys
2 someVar = .Australia
Australia
DollarCountrys CurrencyUnit,
, .
, Swift .
DollarCountrys CurrencyUnit
, Xcode
.
14.3. switch
.
switch.
14.11, , ,
.
14.11
1
2
3
4
5
6
//
var someCurrency = CurrencyUnit.Rouble(ountrys: ["Russia",
"Ukrain", "Belarus"], shortName: "RUB")
//
switch someCurrency {
case .Rouble(let countrys, let shortname):
print(". : \(String(countrys)),
: \(shortname)")
:
. : ["Russia", "Ukrain", "Belarus"], : RUB
switch Currency
Unit, default .
.
, let
case ( Euro).
14.4.
(, String, Character Int).
.
, .
.
, ( 14.12).
14.12
1 enum Smile: String {
2
case Joy = ":)"
3
case Laugh = ":D"
4
case Sorrow = ":("
5
case Suprise = "o_O"
6 }
14 191
Smiles .
String.
.
,
.
.
.
Int,
(
0). , , . , 14.13 ,
.
14.13
1 enum Planet: Int {
2
case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus,
Neptune, Pluton = 999
3 }
1. , : Venus 2,
Earth 3 ..
Pluton , 999.
.
rawValue. Smile
( 14.14).
Joy
":)"
rawValue
Joy String.
rawValue
, .
(14.15).
,
. Planet.
14.15
1 var myPlanet = Planet.init(rawValue: 3)
2 var anotherPlanet = Planet.init(rawValue: 11)
Earth
nil
init() Planet. ,
. , init()
, .
init() , , nil.
- , .
, ,
, .
,
.
init().
, .
.
14.5.
,
. -
14 193
( ) .
. Swift.
,
,
. Swift
: -, .
.
.
,
.
(14.16). Smile
,
.
14.16
1
2
3
4
5
6
7
8
9
(var).
( let) .
14.6.
- init().
,
, .
, , .
Smile ,
( 14.17).
14.17
1 enum Smile: String {
2
case joy = ":)"
3
case laugh = ":D"
4
case sorrow = ":("
5
case suprise = "o_O"
6
//
7
func description(){
8
print(" :
")
9
}
10 }
11 var mySmile = Smile.joy
12 mySmile.description()
:
:
description().
descrip
tion() .
14.7. self
- , .
self,
.
. ,
,
. Smile ( 14.18).
14 195
14.18
1 enum Smile: String {
2
case joy = ":)"
3
case laugh = ":D"
4
case sorrow = ":("
5
case suprise = "o_O"
6
func description(){
7
print(" :
")
8
}
9
func descriptionValue() -> Smile{
10
return self
11
}
12
func descriptionRawValue() -> String{
13
return self.rawValue
14
}
15 }
16 var mySmile = Smile.joy
joy
17 mySmile.descriptionValue()
joy
18 mySmile.descriptionRawValue()
":)"
descriptionValue() self ,
. Smile ,
.
descriptionRawValue()
self.
switch self {},
.
self ,
. .
14.8.
,
. ,
.
.
, , : , , . ,
(14.19). : .
14.19
1 enum ArithmeticExpression{
2
//
3
case Addition(Int, Int)
4
//
5
case Substraction(Int, Int)
6 }
7 var expr = ArithmeticExpression.Addition(10, 14)
Addition(10, 14)
.
Swift , , .
.
expr Arithme
ticExpression, .
-
.
, ( 14.20).
14.20
1 enum ArithmeticExpression{
2
case Addition(Int, Int)
3
case Substraction(Int, Int)
4
//
5
func evaluate() -> Int {
6
switch self{
7
case .Addition(let left, let right):
8
return left + right
9
case .Substraction(let left, let right):
10
return left - right
11
}
12
}
13 }
14 var expr = ArithmeticExpression.Addition(10, 14) Addition(10, 14)
15 expr.evaluate()
24
14 197
evaluate()
.
switch self. , ,
.
,
: : 1 + 5, 6 + 19 .. ,
: 1 + (5 7), 6 5 + 4 ..,
.
ArithmeticExpression ,
Int, . , , ,
. . indirect, :
enum ;
case , .
14.21.
, : , ?
, . 20 + 10 34.
14.21
1 enum ArithmeticExpression {
2
case Number(Int)
3
indirect case Addition(ArithmeticExpression,
ArithmeticExpression)
4
indirect case Subtraction(ArithmeticExpression,
ArithmeticExpression)
5
func evaluate( var expression: ArithmeticExpression? =
nil ) -> Int{
6
expression = (expression == nil ? self : expression)
7
switch expression! {
8
case .Number( let value ):
9
return value
Number . . indirect,
ArithmeticExpression .
evaluate
ArithmeticExpression?.
, , .
:
expr.evaluate(expr)
, .
switch, , ,
,
.
, .
Swift ,
. ,
,
. .
ArithmeticExpression ,
, , ,
.
15
. .
, . ,
.
, .
( ).
15.1.
, .
, ()
.
.
( 15.1).
.
15.1
1 var playerInChess = (name: "", wins: 10)
, , , ,
. ,
, .
, , ,
( ).
,
, . , Int .
struct {
//
}
struct, . , : .
.
, .
, (15.2).
15.2
1 struct PlayerInChess {}
2 var oleg: PlayerInChess
, .
15.2.
PlayerInChess ,
- .
( 15.3).
,
. :
15 201
struct {
var 1:
let 2:
// ...
}
.
Swift .
15.3
1 struct PlayerInChess {
2
var name: String
3
var wins: UInt
4 }
name wins
.
, , , .
,
( 15.4).
15.4
1 var oleg = PlayerInChess(name: "", wins: 32)
PlayerInChess,
.
. ! -
, Xcode .
. Swift
,
.
(.15.1).
,
: ,
, , ,
. ,
- , .
. 15.1.
, .
,
. Swift
.
PlayerInChess (
15.5).
15.5
1
2
3
4
5
6
struct PlayerInChess {
var name = ""
var wins: UInt = 0
}
var oleg = PlayerInChess(name: "", wins: 32)
var maks = PlayerInChess()
PlayerInChess
PlayerInChess
PlayerInChess.
, name wins .
15.3.
,
. .
PlayerInChess
. ,
,
.
15 203
( 15.6).
15.6
1
2
3
4
5
6
7
8
struct PlayerInChess {
var name: String
var wins: UInt = 0
}
var oleg = PlayerInChess(name: "")
//
oleg.name
oleg.wins = 20
,
.
15.4.
, init().
,
, .
.
:
. ,
,
,
.
func. ,
.
PlayerInChess, name ( 15.7).
15.7
1 struct PlayerInChess {
2
var name: String
3
var wins: UInt = 0
.
name, .
self.
wins , .
,
, .
, ,
. , , var.
-. . :
var olegMuhin = PlayerInChess(name: "asd")
var olegLapin = olegMuhin
15.5.
.
. , ,
.
self.
,
( 15.8).
15.8
1 struct PlayerInChess {
2
var name: String
3
var wins: UInt
15 205
4
func description(){
5
print(" \(self.name) \(self.wins) ")
6
}
7 }
8 var oleg = PlayerInChess(name: "", wins: 15)
9 oleg.description()
:
15
, , , .
,
mutating.
,
. , , ,
(15.9).
15.9
1 struct PlayerInChess {
2
var name: String
3
var wins: UInt
4 // , wins
5 mutating func addWins( countOfWins: Int ){
6 self.wins += countOfWins
7 }
8 }
9 var oleg = PlayerInChess(name: "", wins: 15)
10 oleg.wins
11 oleg.addWins(3)
12 oleg.wins
,
.
16
.
. , , ,
.
Swift.
,
:
. -.
, .
.
, (var ),
(let ).
mutating
.
.
. , (sets),
, :
( ) . , ,
.
. init(){},
.
. Swift
, .
16 207
.
.
.
: , , .
,
.
16.1.
. .
class {
//
}
class,
. .
,
, .
.
16.2.
. ,
, . ,
. .
.
, ,
. ,
. , ,
,
.
, .
,
.
( -) .
:
;
;
.
, . Unicode , .
.
, ,
. ,
(nil).
: , (16.1).
16.1
1 class Chessman {
2
let type: String
3
let color: String
4
var coordinates: (String, Int)? = nil
5
let figureSymbol: Character
6
init(type: String, color: String, figure: Character){
7
self.type = type
8
self.color = color
9
self.figureSymbol = figure
10
}
11 }
12 var kingWhite = Chessman(type: "king", color: "white", figure: "")
16 209
. coordinate
. ,
. .
, .
,
. , , ( nil).
type color . : ,
( 16.2).
Chessman. ,
.
16.2
1 //
2 enum ChessmanType {
3
case King
4
case Castle
5
case Bishop
6
case Pawn
7
case Knight
8
case Queen
9 }
10 //
11 enum CheesmanColor {
12
case Black
13
case White
14 }
15 class Chessman {
16
let type: ChessmanType
17
let color: CheesmanColor
18
var coordinates: (String, Int)? = nil
19
let figureSymbol: Character
20
init(type: ChessmanType, color: CheesmanColor, figure:
Character){
21
self.type = type
22
self.color = color
23
self.figureSymbol = figure
24
}
25 }
26 var kingWhite = Chessman(type: .King, color: .White, figure: "")
16.3.
. .
, . ,
,
.
, , , .
, mutating , .
, ( 16.3). Cheesman :
(
).
(
).
16.3
1 class Chessman {
2
let type: ChessmanType
3
let color: CheesmanColor
4
var coordinates: (String, Int)? = nil
5
let figureSymbol: Character
6
init(type: ChessmanType, color: CheesmanColor,
figure: Character){
7
self.type = type
8
self.color = color
9
self.figureSymbol = figure
10
}
11
//
12
func setCoordinates(char c:String, num n: Int){
13
self.coordinates = (c, n)
14
}
16 211
15
// ,
16
func kill(){
17
self.coordinates = nil
18
}
19 }
20 var kingWhite = Chessman(type: .King, color: .White, figure: "")
21 kingWhite.setCoordinates(char: "E", num: 1)
E1.
. .
16.4.
, .
,
.
. Chessman
.
. ,
( 16.4).
16.4
1 class Chessman {
2
let type: ChessmanType
3
let color: CheesmanColor
4
var coordinates: (String, Int)? = nil
5
let figureSymbol: Character
6
init(type: ChessmanType, color: CheesmanColor, figure:
Character){
7
self.type = type
8
self.color = color
9
self.figureSymbol = figure
10
}
11
init(type: ChessmanType, color: CheesmanColor, figure:
Character, coordinates: (String, Int)){
12
self.type = type
13
self.color = color
14
self.figureSymbol = figure
setCoordina
tes(),
.
,
Chessman.
, , .
16.5.
, ,
. ,
CheesmanColor ChessmanType, Chessman.
, , .
,
, ( 16.5).
16.5
1 class Chessman {
2
enum ChessmanType {
3
case King
4
case Castle
5
case Bishop
6
case Pawn
7
case Knight
16 213
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 }
case Queen
}
enum CheesmanColor {
case Black
case White
}
let type: ChessmanType
let color: CheesmanColor
var coordinates: (String, Int)? = nil
let figureSymbol: Character
init(type: ChessmanType, color: CheesmanColor, figure:
Character){
self.type = type
self.color = color
self.figureSymbol = figure
}
init(type: ChessmanType, color: CheesmanColor, figure:
Character, coordinates: (String, Int)){
self.type = type
self.color = color
self.figureSymbol = figure
self.setCoordinates(char: coordinates.0, num:
coordinates.1)
}
func setCoordinates(char c:String, num n: Int){
self.coordinates = (c, n)
}
func kill(){
self.coordinates = nil
}
.
,
( 16.6).
ChessmanType,
Chessman.
16.6
1 var linkToEnumType = Chessman.ChessmanType.Bishop
17
Swift .
, .
17.1.
,
. , .
:
.
,
.
,
. :
,
.
,
. .
.
.
17 215
. , ,
.
lazy var 1
lazy let 2
lazy, .
. ,
, (
17.1).
17.1
1 class AboutMan{
2
let firstName = ""
3
let secondName = ""
4
lazy var wholeName: String = self.generateWholeName()
5
func generateWholeName() -> String{
6
return self.firstName + " " + self.secondName
7
}
8 }
9 var Me = AboutMan()
10 Me.wholeName
AboutMan . wholeName ,
.
nil, .
, . , .
, - .
,
.
,
.
,
.
,
.
var 1: { __ }
(var).
, .
, return.
. wholeName() AboutMan
wholeName,
. (17.2).
17.2
1
2
3
4
5
6
7
class AboutMan{
let firstName = ""
let secondName = ""
var wholeName: String {return self.firstName + " " +
self.secondName}
}
var Me = AboutMan()
Me.wholeName
wholeName
.
17.2.
17 217
(get) -
.
(set)
.
, ,
. ,
, , .
var 1: {
get {
_
}
set (_) {
_
}
}
. get set ,
.
.
return.
.
, . set().
,
, .
set
. .
. : , . .
( 17.3).
perimeter
, radius. perimeter
, radius.
,
.
newValue.
, Circle 17.4.
17.4
1 struct Circle{
2
var coordinates: (x: Int, y: Int)
3
var radius: Float
4
var perimeter: Float {
5
get{
6
return 2.0*3.14*self.radius
7
}
8
set{
9
self.radius = newValue / (2*3.14)
10
}
11
}
12 }
. ,
17 219
.
,
Swift .
(observers).
,
,
.
:
willSet .
didSet .
var 1: {
willSet (){
_
}
didSet (){
_
}
}
willSet didSet, . willSet
, didSet ,
.
,
( , ). willSet newValue,
didSet oldValue.
. ,
, ,
( 17.5).
17.5
1 struct Circle{
2
var coordinates: (x: Int, y: Int)
3
var radius: Float {
4
willSet (newValueOfRadius) {
5
print(" \(self.radius)
\(newValueOfRadius)")
:
10.0 5.0
10.0 5.0
.
perimeter radius,
.
17.3.
, , . , ,
.
, .
.
,
, .
, .
17 221
,
.
. ,
, .
,
lazy.
, .
struct SomeStructure {
static var storedTypeProperty = "Some value"
static var computedTypeProperty: Int {
return 1
}
}
enum SomeEnumiration{
static var storedTypeProperty = "Some value"
static var computedTypeProperty: Int {
return 2
}
}
class SomeClass{
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 3
}
class var overrideableComputedTypeProperty: Int {
return 4
}
}
static
. class
,
. , , .
(
17.6). AudioChannel ,
:
.
.
AudioChannel :
. volume 6,
maxVolume.
,
, .
18
,
.
. .
18.1.
,
.
, Chessboard,
. Chessboard
desk:
var desk: Chessboard
, .
, :
desk.getCellInfo("A", 5)
,
:
desk["A", 5]
.
16.2.
- .
,
.
subscript(_) > __ {
get{
//
}
set(_){
//
}
}
subscript. ( , )
. ,
. ( ) ( ) .
.
, .
,
.
, newValue.
.
,
:
subscript(_) > _ {
//
}
,
, .
,
. .
18 225
,
( 18.1).
: . ,
, .
Chess
man, ,
.
, .
:
, , , ,
.
oordinates,
.
18.1
1 class gameDesk {
2
var desk: [Int:[String:Chessman]] = [:]
3
init(){
4
for i in 1...8 {
5
desk[i] = [:]
6
}
7
}
8
func setChessman(chess: Chessman, coordinates: (String, Int)){
9
if let oldCoordinates = chess.coordinates {
10
desk[oldCoordinates.1]![oldCoordinates.0] = nil
11
}
12
self.desk[coordinates.1]![coordinates.0] = chess
13
chess.setCoordinates(char: coordinates.0, num:
coordinates.1)
14
}
15 }
16 var game = gameDesk()
17 game.setChessman(QueenBlack, coordinates: ("B",2))
18 game.setChessman(QueenBlack, coordinates: ("A",3))
gameDesk . , ( Chessman).
desk
.
,
. ,
.
( ),
.
setChessman desk, . ,
coordinates Chessman.
.
(18.2). .
, ,
nil.
18.2
1 class gameDesk {
2
var desk: [Int:[String:Chessman]] = [:]
3
init(){
4
for i in 1...8 {
5
desk[i] = [:]
6
}
7
}
8
subscript(alpha: String, number: Int) -> Chessman? {
9
get{
10
if let chessman = self.desk[number]![alpha] {
11
return chessman
12
}
13
return nil
14
}
15
}
16
func setChessman(chess: Chessman, coordinates: (String, Int)){
17
if let oldCoordinates = chess.coordinates {
18
desk[oldCoordinates.1]![oldCoordinates.0] = nil
19
}
20
self.desk[coordinates.1]![coordinates.0] = chess
21
chess.setCoordinates(char: coordinates.0, num:
coordinates.1)
22
}
23 }
24 var game = gameDesk()
25 game.setChessman(QueenBlack, coordinates: ("A",3))
26 game["A",3]?.coordinates
18 227
,
(
get).
,
coordinates
.
setChessman() .
, ,
(
18.3).
18.3
1 class gameDesk {
2
var desk: [Int:[String:Chessman]] = [:]
3
init(){
4
for i in 1...8 {
5
desk[i] = [:]
6
}
7
}
8
subscript(alpha: String, number: Int) -> Chessman? {
9
get{
10
if let chessman = self.desk[number]![alpha] {
11
return chessman
12
}
13
return nil
14
}
15
set{
16
self.setChessman(newValue!, coordinates: (alpha,
number))
17
}
18
}
19
func setChessman(chess: Chessman, coordinates: (String, Int)){
20
if let oldCoordinates = chess.coordinates {
21
desk[oldCoordinates.1]![oldCoordinates.0] = nil
22
}
23
self.desk[coordinates.1]![coordinates.0] = chess
24
chess.setCoordinates(char: coordinates.0, num:
coordinates.1)
25
}
26 }
27 var game = gameDesk()
28 game.setChessman(QueenBlack, coordinates: ("A",3))
29 game["C",5] = QueenBlack
30 QueenBlack.coordinates
newValue
. ,
.
, , .
Swift . ,
, .
, , ,
gameDesk ,
nil. desk, coordinates .
1. ,
. , Chessman kill().
2. printDesk() gameDesk,
:
1 _ _ _ _ _ _ _
2
3
4
5
6
7
8
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_ _
_ _
_ _
_ _
_ _
_ _
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
A B C D E F G H
( symbol
Chessman), .
19
- . . ,
, ,
, -.
.
(
), ( ,
).
19.1.
.
, SomeSu
perClass, SomeSubClass .
.
, Quadruped
(19.1). .
Dog, .
Quadruped Dog, .
19.1
1 //
2 class Quadruped {
3
var type = ""
4
var name = ""
5
func walk(){
6
print("walk")
7
}
8 }
9 //
10 class Dog: Quadruped {
11
func bark(){
12
print("woof")
13
}
14 }
15 var dog = Dog()
16 dog.type = "dog"
17 dog.walk() // walk
18 dog.bark() // woof
myDog
Quadruped . , Dog
,
bark().
.
,
, self.
Dog ,
. name,
Quadruped ( 19.2).
19 231
19.2
1 //
2 class Dog: Quadruped {
3
func bark(){
4
print("woof")
5
}
6
func printName(){
7
print(self.name)
8
}
9 }
10 var dog = Dog()
11 dog.name = "Dragon Wan Helsing"
12 dog.printName() // Dragon Wan Helsing
, , . , .
19.2.
,
, . . Swift override
.
,
, .
,
. NoisyDog,
. Dog NoisyDog.
bark() ,
Dog,
(19.3).
19.3
1 class NoisyDog: Dog{
2
override func bark(){
3
print ("woof")
override Swift,
bark() NoisyDog .
, .
.
.
,
, Swift
.
self
super.
bark() NoisyDog
.
"woof", . bark()
, ( 19.4).
19.4
1
2
3
4
5
6
7
8
9
19 233
:
someMethod()
, super.
someMethod() (
).
someProperty
,
super.someProperty .
someIndex ,
super[someIndex] .
,
. ,
, ,
.
. ,
, , .
,
.
super.init().
Quadruped . Dog type "dog".
,
( 19.5).
19.5
1 class Dog: Quadruped {
2
override init(){
3
super.init()
4
self.type = "dog"
}
func bark(){
print("woof")
}
func printName(){
print(self.name)
}
, . .
, ,
.
,
. .
.
,
. :
,
.
,
, .
, . .
19.3. final
Swift .
19 235
final,
:
final class ;
final var ;
final func ;
final subscript .
.
, .
19.4.
, ,
.
19.6.
Quadruped .
19.6
1
2
3
4
5
6
7
animalsArray Dog
NoisyDog. , Quadruped.
19.5.
: Quadruped, Dog NoisyDog, animalsArray,
.
, ( ).
, .
:
;
.
is . true ,
.
animalsArray ( 19.7).
19.7
1 for item in animalsArray {
2
if item is Dog {
3
print("Yap")
4
}
5 }
6 // Yap 2
animalsArray Dog. ,
: Dog
NoisyDog.
,
animalsArray
. , , ( Quadruped).
Dog,
bark(), Swift ,
Quadruped.
Swift,
,
as, , : as? as!.
19 237
, ,
.
:
as? ? (
), nil .
as!
.
.
animalsArray.
bark(), Quadruped, Dog NoiseDog (
19.8).
19.8
1 for item in animalsArray {
2
if var animal = item as? NoisyDog {
3
animal.bark()
4
}else if var animal = item as? Dog {
5
animal.bark()
6
}else{
7
item.walk()
8
}
9 }
animalArray item.
as?
. item NoisyDog Dog,
bark().
20
Any
AnyObject
Swift ,
:
AnyObject ;
Any .
,
.
20.1. Any
Any . ,
( 20.1).
20.1
1
2
3
4
5
6
7
Any
. , .
, (
20.2).
20.2
1 for
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 }
thing in things {
switch thing {
case let someInt as Int:
print("an integer value of \(someInt)")
case let someDouble as Double where someDouble > 0:
print("a positive double value of \(someDouble)")
case let someString as String:
print("a string value of \"\(someString)\"")
case let (x, y) as (Double, Double):
print("an (x, y) point at \(x), \(y)")
case let stringConverter as String -> String:
print(stringConverter("Troll"))
default:
print("something else")
}
:
an integer value of 0
something else
an integer value of 42
a string value of "hello"
an (x, y) point at 3.0, 5.0
Hello, Troll
as. switch-case
- ( ).
20.2. AnyObject
AnyObject ,
.
Cocoa Foundation.
Objective-C,
.
AnyObject (
20.3).
20.3
1 let someObjects: [AnyObject] = [Dog(),NoisyDog(),Dog()]
AnyObject .
, , AnyObject,
.
AnyObject
, AnyObject
.
AnyObject
( 20.4).
20.4
1 for object in someObjects {
2
let animal = object as! Dog
3
print("This is bad Dog")
4 }
( 20.5).
20.5
1 for object in someObjects as! [Dog]{
2
print("This is bad Dog")
3 }
21
, .
,
.
21.1.
,
.
,
:
init(){};
, .
,
.
,
nil.
, , (designated).
. , (
),
. ,
self.init() .
.
,
, ,
. ,
.
.
,
( nil).
Swift (conveni
ence) . .
.
. ,
.
.
convenience init() {
//
}
conve
nience, init.
.
21 243
.
Quadruped , Dog
NoisyDog. Dog ,
. , type (
21.1).
21.1
1 class Dog: Quadruped {
2
override init(){
3
super.init()
4
self.type = "dog"
5
}
6
convenience init(text: String){
7
self.init()
8
print(text)
9
}
10
func bark(){
11
print("woof")
12
}
13
func printName(){
14
print(self.name)
15
}
16 }
17 var myDog = Dog(text: " Dog ")
Dog
.
.
.
. , :
,
.
, .
Swift
:
.
.
.
.21.1.
. 21.1.
. ,
. ,
.
21 245
(
).
, , ,
- .
(failable) . nil .
.
init?() {
//
}
init?
( ), ,
.
return nil.
.
, .
( ),
.
.
(21.2).
21.2
1 class Rectangle{
2
var height: Int
3
var weight: Int
4
init?(height h: Int, weight w: Int){
5
self.height = h
6
self.weight = w
7
if !(h > 0 && w > 0) {
8
return nil
9
}
.
, nil. , nil, .
nil .
.
,
.
, .
,
.
,
. 21.3.
TemperatureUnit ,
. ,
,
, nil, .
21.3
1 enum TemperatureUnit {
2
case Kelvin, Celsius, Fahrenheit
3
init?(symbol: Character) {
4
switch symbol {
5
case "K":
6
self = .Kelvin
7
case "C":
8
self = .Celsius
9
case "F":
10
self = .Fahrenheit
11
default:
12
return nil
13
}
21 247
14
}
15 }
16 let fahrenheitUnit = TemperatureUnit(symbol: "F")
symbol .
.
, ,
init?(rawValue:). ( 21.4).
21.4
1
2
3
4
5
TemperatureUnit Character.
, ,
.
init? init!. ,
,
.
nil.
(required) ,
.
required init() {
//
}
init required.
, required ,
.
override
.
21.2.
.
. . .
, , ,
.
deinit {
//
}
deinit, .
. , . , ,
,
.
( 21.5).
21.5
1 class SuperClass {
2
init?(isNil: Bool){
3
if isNil == true {
4
return nil
5
}else{
6
print(" ")
7
}
8
}
9
deinit {
10
print(" ")
11
}
12 }
13 class SubClass:SuperClass{
21 249
14
15
16
17 }
18
19 var
20 obj
deinit {
print(" ")
}
obj = SubClass(isNil: false)
= nil
SubClass , .
,
nil. , , .
22
ARC
,
, .
, .
, .
Swift ,
Swift .
22.1.
, ,
, .
:
;
Swift.
SubClass?, nil.
Swift.
myClass, description. -
22 ARC 251
,
.
,
(22.1).
22.1
1 class myClass{
2
var description: String
3
init(description: String){
4
print(" \(description) ")
5
self.description = description
6
}
7
deinit{
8
print(" \(self.description) ")
9
}
10 }
11 var myVar1 = myClass(description: "")
12 if true {
13
var myVar2 = myClass(description: "")
14 }
myVar2 , if. , ,
.
.
if , , .
.
,
.
, ( 22.2).
myVar1
myClass. myVar2
.
,
.
, Swift , .
,
.
22.2.
, .
, .
, .
(22.3).
22 ARC 253
22.3
1 class Human {
2
let name: String
3
var child = [Human?]()
4
var father: Human?
5
var mother: Human?
6
init(name: String){
7
self.name = name
8
}
9
deinit {
10
print(self.name+" - ")
11
}
12 }
13 if 1==1 {
14
var Kirill = Human(name: "")
15
var Olga = Human(name: "")
16
var Aleks = Human(name: "")
17
Kirill.father = Aleks
18
Kirill.mother = Olga
19
Aleks.child.append(Kirill)
20
Olga.child.append(Kirill)
21 }
,
, . ,
, .
, ,
, , Swift , ,
.
.
Swift , . , , ,
, ,
.
. .
, Swift , , , ,
.
. , Swift
, .
.
weak
onowned. weak ,
nil . weak .
,
( ).
unowned.
,
father mother ( 22.4).
22.4
1 class Human {
2
let name: String
3
var child = [Human?]()
4
weak var father: Human?
5
weak var mother: Human?
6
init(name: String){
7
self.name = name
8
}
9
deinit {
10
print(self.name+" - ")
11
}
12 }
13 if 1==1 {
14
var Kirill = Human(name: "")
15
var Olga = Human(name: "")
16
var Aleks = Human(name: "")
17
Kirill.father = Aleks
18
Kirill.mother = Olga
19
Aleks.child.append(Kirill)
20
Olga.child.append(Kirill)
21 }
:
-
-
-
22 ARC 255
,
.
. ,
,
.
22.3.
ARC
(Automatic Reference Counting ),
.
.
ARC
ARC Swift ,
.
, ,
.
, ,
,
, .
, ARC
, ,
.
, ARC
.
, ARC Swift .
, . ,
.
.
, .
. 22.5 ,
( ).
22.5
1 class Human{
2
var name = ""
3
deinit{
4
print(" ")
5
}
6 }
7 var closure : (() -> ())?
8 if true{
9
var human = Human()
10
closure = {
11
print(human.name)
12
}
13
closure!()
14 }
15 print(" ")
human, Human, , ,
.
, ,
.
.
,
, Swift
.
, ,
( 22.6).
22 ARC 257
22.6
1 class Human{
2
var name = ""
3
deinit{
4
print(" ")
5
}
6 }
7 var closure : (() -> ())?
8 if true{
9
var human = Human()
10
//
11
closure = {
12
[unowned human] in
13
print(human.name)
14
}
15
closure!()
16 }
human
, Swift .
unowned ,
.
23
, ,
. ,
,
.
23.1.
, ,
?
,
( 23.1).
23.1
1
2
3
4
5
6
class Person {
var residence: Residence?
}
class Residence {
var numberOfRooms = 1
}
Person Residence,
.
Person,
residence nil, .
numberOfRooms, , , -
23 259
.
, residence .
(23.2).
23.2
1
2
3
4
5
6
7
, ,
.
, ,
Residence ( 23.3).
23.3
1 class Person {
2
var residence: Residence?
3 }
4 class Residence {
5
var numberOfRooms = 1
6
var room: Room?
7 }
8 class Room {
9
var square: Int = 10
10 }
, square .
.
, .
( 23.4).
,
room. ( residence, room)
.
- man.
residence?.room?.square ( nil),
.
,
, nil.
nil.
. .
,
.
, .
23.2.
. .
( 23.5).
square.
23 261
23.5
1 man.residence?.room?.square = 36
2 man.residence?.room?.square // 36
man.residence?.room?.square, .
- ,
, .
23.3.
, , .
Residence , ( 23.6).
23.6
1 class Residence {
2
var numberOfRooms = 1
3
var room: Room?
4
func returnNumberOfRooms() {
5
return numberOfRooms
6
}
7 }
( 23.7).
23.7
1 man.residence?.printNumberOfRooms()
2 //
, .
24
(, ),
. , ,
(, , , Swift
).
.
.
(static).
.
,
.
.
,
. , .
extension {
// SomeType
}
extension, . .
24 263
, ,
, .
24.1.
. Double,
(24.1) Double
.
24.1
1 extension Double {
2
var km: Double { return self * 1000.0 }
3
var m: Double { return self }
4
var cm: Double { return self / 100.0 }
5
var mm: Double { return self / 1000.0 }
6
var ft: Double { return self / 3.28084 }
7 }
8 let oneInch = 25.4.mm
9 print(" - \(oneInch) ")
10 // " - 0.0254 "
11 let threeFeet = 3.ft
12 print(" - \(threeFeet) ")
13 // " - 0.914399970739201 "
.
Double.
, 1.0 Double . m
self.
. , 1000 ,
km
self * 1000.
, , .
24.2.
. , , .
.
.
Double (
24.2). ,
. ,
, .
24.2
1 import UIKit
2 // ""
3 struct Line{
4
var pointOne: (Double, Double)
5
var pointTwo: (Double, Double)
6 }
7 // Double
8 extension Double {
9
init(line: Line){
10
self = sqrt(pow((line.pointTwo.0 - line.pointOne.0),2) +
pow((line.pointTwo.1 - line.pointOne.1),2))
11
}
12 }
13 var myLine = Line(pointOne: (10,10), pointTwo: (14,10))
14 var lineLength = Double(line: myLine) // 4
24 265
Line ,
. Line
.
,
.
24.3.
.
( 24.3). Int
repetitions,
() -> (). ,
,
.
24.3
1 extension Int {
2
func repetitions(task: () -> ()) {
3
for _ in 0..<self {
4
task()
5
}
6
}
7 }
8 3.repetitions({
9
print("Swift")
10 })
11 /*
12
Swift
13
Swift
14
Swift */
mutating. square(),
.
Int , mutating
( 24.4).
extension Int {
mutating func square() {
self = self * self
}
}
var someInt = 3
someInt.square()
24.4.
, ,
.
24.5 Int
, . , .
24.5
1 extension Int {
2
subscript(var digitIndex: Int) -> Int {
3
var decimalBase = 1
4
while digitIndex > 0 {
5
decimalBase *= 10
6
--digitIndex
7
}
8
return (self / decimalBase) % 10
9
}
10 }
11 746381295[0]
12 // 5
13 746381295[1]
14 // 9
, 0, .
25
Swift , ,
.
, , . - ,
.
.
.
- , .
protocol {
//
}
protocol,
.
- , :
struct : {
//
}
. .
, ,
,
:
25.1.
(static), .
( ).
.
,
.
{get},
{get set}.
,
(25.1).
25.1
1 protocol SomeProtocol {
2
var mustBeSettable: Int { get set }
3
var doesNotNeedToBeSettable: Int { get }
4 }
25 269
25.2
1 protocol AnotherProtocol {
2
static var someTypeProperty: Int { get set }
3 }
someTypeProperty .
( 25.3).
25.3
1
2
3
4
5
6
7
protocol FullyNamed {
var fullName: String { get }
}
struct Person: FullyNamed {
var fullName: String
}
let john = Person(fullName: "John Wick")
25.2.
.
.
static.
. mutating.
mutating , .
.
, ,
, ,
( 25.4).
25.3.
.
, ,
.
. ,
required. , .
required , final.
, , , ( 25.5).
25.5
1 protocol Named{
2
init(name: String)
3 }
4 class Person : Named {
25 271
5
6
7
8
9 }
25.4.
- ,
.
.
, ,
, .
,
is,
.
true,
, false .
25.5.
, .
.
(25.6).
25.6
1
2
3
4
5
6
7
8
9
protocol TextRepresentable {
func asText() -> String
}
extension Int: TextRepresentable {
func asText() -> String {
return String(self)
}
}
5.asText()
, , .
Swift2.0.
, .
, .
TextRepre
sen
table ( 25.7).
25.7
1 extension TextRepresentable {
2
func description() -> String {
3
return " TextRepresentable"
4
}
5 }
6 5.description()
TextRepresentable.
, Int .
Int.
25.6.
.
, , , -
25 273
.
,
.
25.8.
25.8
1 protocol SuperProtocol {
2
var someValue: Int { get }
3 }
4 protocol SubProtocol: SuperProtocol {
5
func someMethod()
6 }
7 struct SomeStruct: SubProtocol{
8
let someValue: Int = 10
9
func someMethod() {
10
//
11
}
12 }
SuperProtocol ,
SubProtocol ,
. SubProtocol, ,
, .
25.7.
,
(
). class.
.
25.9. SubProtocol ,
.
25.9
1 protocol SubProtocol: class, SuperProtocol {
2
func someMethod()
3 }
25.8.
, ,
. , ,
, .
, .
protocol<1, 2 ...>
protocol, .
25.10 , .
25.10
1 protocol Named {
2
var name: String { get }
3 }
4 protocol Aged {
5
var age: Int { get }
6 }
7 struct Person: Named, Aged {
8
var name: String
9
var age: Int
10 }
11 func wishHappyBirthday(celebrator: protocol<Named, Aged>) {
12
print(" , \(celebrator.name)! \
(celebrator.age)!")
13 }
14 let birthdayPerson = Person(name: " ", age: 46)
15 wishHappyBirthday(birthdayPerson)
16 // " , ! 46!"
: Named Aged.
.
wishHappyBirthday()
, .
Person, .
Any. . Any
protocol<>, .
26
, , Swift
, .
, ,
.
: Swift
, .
, , ?,
.
, Swift , : , , ,
.
Swift . ?
, , .
, . , Hashable
, .
- ,
,
.
Swift CollectionType . ,
,
.
, Array, Set Dictionary.
Xcode. 26.1.
26.1
1 var str: String
, Option,
String.
, .
String.
Option, str .
(.26.1).
26.1.
26 277
. 26.2.
Apple,
, Swift Xcode.
Conforms To ,
String,
Hashable. , .
, (26.2). keys values ,
,
.
26.2
1 var countryDict = ["RUS":"
", "BEL":"", "UKR":""]
2 // countryDict
3 var keysOfDict = countryDict.keys
["BEL": "",
"UKR": "",
"RUS": "
"]
LazyMapCollection
<Dictionary<String,
String>, String>
LazyMapCollection
<Dictionary<String,
String>, String>
Option
keysOfDict,
,
LazyMapCollection (.26.3).
. 26.3. LazyMapCollection
, . Collection
, .
:
struct LazyMapCollection<Base : CollectionType, Element>
, , ,
, ,
26 279
, Base .
Element.
Element. ,
Element ,
.
Conforms To.
LazyCollectionType. , (.26.4).
. 26.4. LazyCollectionType
Inherits From.
CollectionType, LazyCollectionType.
CollectionType , , ,
, . ,
CollectionType (.26.5).
Adopted By ,
. Array ,
Dictionary, Set.
. 26.5. CollectionType
, .26.6.
protocol
CollectionType
protocol
LazyCollectionType
structs
Array,
Dictionary,
Set
struct
LazyMapCollection
. 26.6.
26 281
CollectionType , , , ,
, .
LazyMapCollection
Element . ,
. ,
, 26.2
countryDict. Xcode keysofDict.
:
var keys: LazyMapCollection<Dictionary<String, String>, String>
, :
LazyMapCollection<Dictionary<String, String>, String>
(Dictionary<String, String>)
, , (String)
.
Element.
, keys arrays , String.
, ,
, ? , .
,
(26.3).
26.3
1 var countryDict = ["RUS":"
", "BEL":"",
"UKR":""]
2 var keys = Set(countryDict.keys)
3 var values = Array(countryDict.values)
["BEL": "",
"UKR": "",
"RUS": "
"]
{"BEL", "UKR", "RUS"}
["",
"",
"
"]
reverse(), .
26.4, ,
ReverseRandomAccessCollection
<Array<Int>>. , ,
,
, ,
Array<Int> ( <[Int]>). ,
.
26.4
1 var someArray = [1, 3, 5, 7, 9]
[1, 3, 5, 7, 9]
2 var reverseSomeArray = someArray.reverse()
ReverseRandomAccessCollection<Array<Int>>
, reverse() Array(),
keys values ,
Array<Int> ( 26.5).
26.5
1 var someArray = [1, 3, 5, 7, 9]
2 let resArray: Array<Int> = someArray.reverse()
[1, 3, 5, 7, 9]
[9, 7, 5, 3, 1]
, ,
,
Apple , , . .
27
(generic)
Swift. .
,
.
(, ) .
,
Swift ,
.
Array (). ,
: Array<Int>, Array<String> ..
, .
, , Dictonary ,
Hashable (
).
27.1.
,
( 27.1).
27.1
1 func swapTwoInts(inout a: Int, inout b: Int) {
2
let temporaryA = a
3
a = b
4
b = temporaryA
}
var firstInt = 4010
var secondInt = 13
swapTwoInts(&firstInt, &secondInt)
T,
(Int, String ..). ,
a b .
27 285
swapTwoValues() , swapTwoInts().
.
,
, .
,
.
27.2.
.
, , .
Stack ().
, ,
:
push() ;
pop()
.
.
(
27.3).
27.3
1 struct IntStack {
2
var items = [Int]()
3
mutating func push(item: Int) {
4
items.append(item)
5
}
6
mutating func pop() -> Int {
7
return items.removeLast()
8
}
9 }
Int. [Int].
.
.
,
( 27.4).
27.4
1 struct Stack<T> {
2
var items = [T]()
3
mutating func push(item: T) {
4
items.append(item)
5
}
6
mutating func pop() -> T {
7
return items.removeLast()
8
}
9 }
,
.
Stack,
, ( 27.5).
27.5
1
2
3
4
Stack<String> .
,
( 27.6). , .
27.6
1 struct Stack<T> {
2
var items = [T]()
3
init(){}
4
init(_ elements: T...){
5
self.items = elements
6
}
27 287
7
8
9
10
11
12
13 }
14 var
15 var
,
,
.
,
.
27.3.
, .
Dictionary, :
Hashable.
.
, .
(
),
; , ,
, .
.
, ( 27.7).
Swift
Equatable.
(==) (!=). , , .
27.4.
Swift .
, , .
Stack,
,
( 27.8).
27.8
1 extension Stack {
2
var topItem: T? {
3
return items.isEmpty ? nil : items[items.count - 1]
4
}
5 }
topItem T
. , . nil.
27.5.
, , .
27 289
,
.
,
- .
Container, Item
Type ( 27.9).
27.9
1 protocol Container {
2
typealias ItemType
3
mutating func append(item: ItemType)
4
var count: Int { get }
5
subscript(i: Int) -> ItemType { get }
6 }
Container () , Stack.
, , .
ItemType, .
Stack 27.10.
27.10
1 struct Stack<T>: Container {
2
typealias ItemType = T
3
var items = [T]()
4
var count: Int {
5
return items.count
6
}
7
init(){}
8
init(_ elements: T...){
9
self.items = elements
10
}
11
subscript(i: Int) -> T {
12
return items[i]
13
}
14
mutating func push(item: T) {
15
items.append(item)
16
}
17
mutating func pop() -> T {
18
return items.removeLast()
19
}
Stack Container, : , .
typealias , .
item append , Swift , T
ItemType, Container.
typealias ,
, .
28
.
.
,
.
.
.
.
28.1.
Swift , .
Error
Type, , , ,
.
. .
,
( 28.1).
28.1
1 enum VendingMachineError: ErrorType {
2
case InvalidSelection
3
case InsufficientFunds(coinsNeeded: Int)
4
case OutOfStock
5 }
:
;
;
.
, -
.
.
, throw. ,
( 28.2).
28.2
1 throw VendingMachineError.InsufficientFunds(coinsNeeded: 5)
28.2.
- . .
Swift :
.
do-catch.
.
.
- ,
,
try.
.
(, ),
, ,
, .
, ,
throws.
28.3 ,
.
28 293
28.3
1 func anotherFunc() throws {
2
//
3
var value = try someFunc()
4
// ...
5 }
6 func someFunc() throws -> String{
7
//
8
try anotherFunc()
9
// ...
10 }
11 try someFunc()
}
guard item.count > 0 else {
throw VendingMachineError.OutOfStock
}
guard item.price <= coinsDeposited else {
throw VendingMachineError.InsufficientFunds(coinsNeeded:
item.price - coinsDeposited)
}
coinsDeposited -= item.price
--item.count
inventory[name] = item
dispenseSnack(name)
Item
. VendingMachine . inventory , .
coinsDeposited .
dispenseSnack() ,
. vend()
.
( ,
) vend() , VendingMachineError.
guard
throw. throw ,
, .
vend() ,
try do-catch.
, - ( 28.5).
favoriteSnacks
.
28.5
1 let favoriteSnacks = [
2
"Alice": "Chips",
3
"Bob": "Licorice",
4
"Eve": "Pretzels",
28 295
5
6
7
8
9
]
func buyFavoriteSnack(person: String, vendingMachine:
VendingMachine) throws {
let snackName = favoriteSnacks[person] ?? "Candy Bar"
try vendingMachine.vend(itemNamed: snackName)
}
buyFavoriteSnack() ,
vend(), throw try.
do-catch
,
.
do-catch.
do {
try
} catch 1 {
// ...
} catch 2 {
// ...
}
do catch. do
, .
try.
,
catch. , .
where .
catch- .
,
error.
do-catch, ( 28.6).
28.6
1 var vendingMachine = VendingMachine()
2 vendingMachine.coinsDeposited = 8
3 do {
buyFavoriteSnack()
do.
Alice, .
try , , try? .
,
nil.
28.7.
28.7
1 func someThrowingFunction() throws -> Int {
2
// ...
3 }
4 let x = try? someThrowingFunction()
someThrowingFunction() , x nil.
,
.
try! , ,
,
.
28.8.
28 297
28.8
1 let photo = try! loadImage("./Resources/John Appleseed.jpg")
loadImage() ,
.
,
try! .
:
, .
28.3.
Swift ,
.
defer, .
, .
,
defer, ..
( 28.9).
28.9
1 func processFile(filename: String) throws {
2
if exists(filename) {
3
let file = open(filename)
4
defer {
5
close(file)
6
}
7
while let line = try file.readline() {
8
// .
9
}
10
}
11 }
defer .
29
,
Swift. ,
.
.
29.1.
Swift.
, ,
( 29.1).
29.1
1 struct Vector2D {
2
var x = 0.0, y = 0.0
3 }
x y .
(0,0),
.
,
(+), 29.2.
29 299
29.2
1
2
3
4
5
6
,
. ,
.
, , Swift
.
.
, .
Swift ( ) ( ) .
prefix postfix .
Vector2D ( 29.3).
29.3
1
2
3
4
5
6
, .
(+)
.
(inout),
.
29.4
- Vector2D.
29.4
1
2
3
4
5
6
7
, .
Vector2D.
,
.
, ,
.
( 29.5).
29.5
1
2
3
4
5
6
7
29 301
8 let anotherTwoThree = Vector2D(x: 2.0, y: 3.0)
9 if twoThree == anotherTwoThree {
10
print(" .")
11 }
12 // " ."
==
Vector2D. false
,
.
29.2.
Swift .
operator prefix, infix postfix,
,
.
+++, Vector2D ( 29.6).
29.6
1 prefix operator +++ {}
2 prefix func +++ (inout vector: Vector2D) -> Vector2D
3 {
4
vector += vector
5
return vector
6 }
7 var toBeDoubled = Vector2D(x: 1.0, y: 4.0)
8 let afterDoubling = +++toBeDoubled
9 // toBeDoubled (2.0, 8.0)
10 // afterDoubling (2.0, 8.0)
.
Swift. iOS
.
.
.
.
. , .
.
, 192102, -, . (. ), 3, , . 7.
034-2014, 58.11.12
, .
24.12.15. 6090/16. . . . . 19,000. 700. 0000.
.
.
142300, , . , . , 1.