1
00:00:06,120 --> 00:00:06,830
It once everyone.

2
00:00:06,820 --> 00:00:12,410
Mark Price you're at death's elopes dot com and we're going to continue forward in our swoosh app.

3
00:00:12,420 --> 00:00:18,360
So far what we've done is we have built out segues so we can swap between screens.

4
00:00:18,360 --> 00:00:23,340
We talked about a common error how to fix it and we've actually just built all the designs and everything

5
00:00:23,340 --> 00:00:28,980
and so in this one lets actually create some logic with the buttons and learn how to pass data between

6
00:00:28,980 --> 00:00:32,640
View controllers which is a very important thing and we also get a lot of questions about that as well

7
00:00:32,640 --> 00:00:33,110
too.

8
00:00:33,240 --> 00:00:40,620
And so you can learn some core foundational stuff stuff off and first things first don't let me go ahead

9
00:00:40,650 --> 00:00:43,730
and just do some good stuff.

10
00:00:43,770 --> 00:00:47,340
So I'm just going to get at get commit Would you should always be doing in your code.

11
00:00:47,340 --> 00:00:50,520
You don't need to follow this format here with all these different branches but you should always be

12
00:00:50,970 --> 00:00:53,310
using get and always adding and always committing.

13
00:00:53,430 --> 00:00:56,130
You will always use it in your job and pretty much everyone.

14
00:00:56,130 --> 00:01:03,330
Ninety nine percent of companies out there are using get nowadays so really important stuff for Lufa.

15
00:01:03,330 --> 00:01:03,660
All right.

16
00:01:03,660 --> 00:01:05,040
So get commit dash.

17
00:01:05,670 --> 00:01:12,330
What we did was we did segues programmatically programmatically.

18
00:01:12,420 --> 00:01:13,180
All right perfect.

19
00:01:13,320 --> 00:01:13,720
So you.

20
00:01:13,800 --> 00:01:15,810
Check out dash B.

21
00:01:15,990 --> 00:01:18,850
Let's actually push this first push origin.

22
00:01:18,910 --> 00:01:25,410
Lesson 0 8 when I push it to the origin that means it's pushing it to you know get help or bit bucket

23
00:01:25,410 --> 00:01:27,320
or wherever the remote origin is.

24
00:01:27,330 --> 00:01:33,370
So the code is there as well to now get check out Dasch be lesson 0 9.

25
00:01:34,110 --> 00:01:38,000
If you're wondering why the keyboard sounds a little bit different it is because I just switch keyboards

26
00:01:38,000 --> 00:01:40,530
to a cool razor gaming mechanical keyboard.

27
00:01:40,680 --> 00:01:44,190
And the reason why is Logitech keyboards absolutely suck.

28
00:01:44,220 --> 00:01:45,420
And they always stop working.

29
00:01:45,540 --> 00:01:49,040
And even though they look cool and they're quiet they stop working.

30
00:01:49,040 --> 00:01:50,840
And so these ones are very reliable.

31
00:01:50,970 --> 00:01:51,500
OK.

32
00:01:51,810 --> 00:01:53,240
All right with get out of the way here.

33
00:01:53,250 --> 00:01:56,100
Let's go ahead and open up our project.

34
00:01:56,100 --> 00:01:56,580
All right.

35
00:01:56,580 --> 00:01:58,060
We want this one right here.

36
00:01:58,470 --> 00:01:58,920
App.

37
00:01:58,920 --> 00:02:00,380
Swoosh.

38
00:02:01,050 --> 00:02:01,290
Great.

39
00:02:01,290 --> 00:02:04,210
So here's our story boards with our segues.

40
00:02:04,290 --> 00:02:08,320
And of course we can go back and forth between the different view controllers.

41
00:02:08,330 --> 00:02:10,520
And so let's talk about what we want to do.

42
00:02:10,710 --> 00:02:13,290
We've got a screen here so that we could get started.

43
00:02:13,290 --> 00:02:14,420
We go here now.

44
00:02:14,770 --> 00:02:16,080
There's some logic that needs to happen.

45
00:02:16,080 --> 00:02:18,810
A user is going to select mens womens or coed.

46
00:02:18,990 --> 00:02:19,590
OK.

47
00:02:19,770 --> 00:02:25,880
And what needs to happen is before someone can actually go in and click the next button.

48
00:02:26,040 --> 00:02:26,660
OK.

49
00:02:26,760 --> 00:02:29,000
They should have to will select one of these options here.

50
00:02:29,220 --> 00:02:36,900
And then once we get past this screen here we when get past the selected data over here to our skill

51
00:02:36,910 --> 00:02:40,080
Visi so we can then further enhance the choice.

52
00:02:40,080 --> 00:02:47,910
Whether you're a beginner or a baller and then finish and then basically if we had other screens you

53
00:02:47,910 --> 00:02:49,140
would do something with that data.

54
00:02:49,140 --> 00:02:52,740
So what we're going to do is we're going to learn how to store the data in the screen and then how to

55
00:02:52,740 --> 00:02:53,830
pass it on over here.

56
00:02:54,120 --> 00:02:56,620
And we also do some logic here with the next ball.

57
00:02:56,640 --> 00:03:02,640
And so that it doesn't let you tap it unless there is the proper Rella data in place so let's go ahead

58
00:03:02,670 --> 00:03:04,130
and get started.

59
00:03:04,140 --> 00:03:08,380
First things first let's click this next button let's just disable it by default.

60
00:03:08,430 --> 00:03:11,700
So it can't it cannot be tapped on.

61
00:03:11,700 --> 00:03:14,400
So see this enabled button all we're going to do is turn it off.

62
00:03:14,400 --> 00:03:20,420
And what we'll do is when one of these options is selected we will then enable this button from code.

63
00:03:20,580 --> 00:03:21,240
OK.

64
00:03:21,660 --> 00:03:27,000
So in order to enable this from code what we need to do is open up the assistant editor and make sure

65
00:03:27,000 --> 00:03:30,360
that we have an I.V. outlet available for this button.

66
00:03:30,360 --> 00:03:35,190
So even though we may have an action for our next tap We're also going to need an outlet so we can actually

67
00:03:36,000 --> 00:03:38,860
grab a reference the buy and make changes to it.

68
00:03:38,850 --> 00:03:44,910
So let's go ahead and control drag from the next button and leave it as an outlet and what we're going

69
00:03:44,910 --> 00:03:49,100
to do is call this next beat like so.

70
00:03:49,620 --> 00:03:50,250
OK.

71
00:03:50,550 --> 00:03:51,810
Very good.

72
00:03:51,810 --> 00:03:55,680
And you're going to notice when we work with ibl you're going to see this week a lot.

73
00:03:55,800 --> 00:03:56,230
OK.

74
00:03:56,280 --> 00:03:57,000
What does weak mean.

75
00:03:57,000 --> 00:04:00,690
Well it kind of means what you think it means you know you the strong and you get the weak.

76
00:04:00,810 --> 00:04:06,870
And in this case when it comes to coding and anytime you make a variable of some kind it's stored in

77
00:04:06,870 --> 00:04:07,480
memory.

78
00:04:07,560 --> 00:04:13,770
Ok has a memory address and then different parts of your program can access the memory they can access

79
00:04:13,770 --> 00:04:16,420
that slot in memory or the item that's there.

80
00:04:16,440 --> 00:04:23,090
Well what happens is when you put an object here in your view controller OK your view controller itself.

81
00:04:23,290 --> 00:04:27,510
OK here this intern here in the interface with this view controller it's actually going to hold a reference

82
00:04:27,510 --> 00:04:28,140
to this button.

83
00:04:28,140 --> 00:04:34,500
So just by virtue of dragging a button on here this view controller the user interface element is going

84
00:04:34,500 --> 00:04:37,640
to hold a reference it's going to point to this button in memory.

85
00:04:37,770 --> 00:04:38,560
OK.

86
00:04:38,700 --> 00:04:41,670
So when we make an outlet we don't want to do that twice.

87
00:04:41,670 --> 00:04:46,800
We don't want our code to point to the same spot in memory and for the Interface Builder file to point

88
00:04:46,800 --> 00:04:50,600
to it a memory because that's two different things holding on to it in memory.

89
00:04:50,790 --> 00:04:56,250
And so let's say and let's say that this controller screen goes off the screen and gets unloaded.

90
00:04:56,340 --> 00:05:00,660
You know if the code was still living we wouldn't want to reference it because it's no longer needed

91
00:05:00,750 --> 00:05:01,980
and vice versa.

92
00:05:02,040 --> 00:05:05,060
And it may be hard to understand you don't have to understand it completely right now.

93
00:05:05,400 --> 00:05:10,140
But the important thing to understand is that when you're working with IBM let's make sure your variables

94
00:05:10,200 --> 00:05:17,310
are weak so the UI and the code are not both referencing what we will do is mean and this view controllers

95
00:05:17,340 --> 00:05:18,850
unloaded out of memory.

96
00:05:19,000 --> 00:05:19,290
OK.

97
00:05:19,290 --> 00:05:21,130
It's a reference to this button will go away.

98
00:05:21,330 --> 00:05:23,940
And if this says weak this one will drop off as well too.

99
00:05:24,060 --> 00:05:26,190
Otherwise it would hold on to it and you could have a memory leak.

100
00:05:26,400 --> 00:05:31,230
You could have this button in memory even though the screen is not present to the user and it can no

101
00:05:31,230 --> 00:05:37,170
longer use that spot of memory and therefore your app can't be as powerful as it needs to be so a lot

102
00:05:37,170 --> 00:05:39,380
of information there make your outlets weak.

103
00:05:39,400 --> 00:05:40,410
It's there by default.

104
00:05:40,410 --> 00:05:41,160
OK.

105
00:05:41,970 --> 00:05:46,110
So when the screen loads it will automatically be disabled because we said that in the Interface Builder.

106
00:05:46,110 --> 00:05:50,580
And so the next thing I want to do is let's go ahead and set these Iby actions here.

107
00:05:50,790 --> 00:05:52,330
So we'll set one for Menz.

108
00:05:52,350 --> 00:06:04,620
So changes from outlet to action and we're say on mennes tapped same thing for women's on women's tab.

109
00:06:05,500 --> 00:06:08,230
And that was I already made mistakes there.

110
00:06:08,240 --> 00:06:17,180
That was in IAB outlet instead of a instead of a b action and let's go ahead and change it to an action.

111
00:06:17,250 --> 00:06:21,550
And this was say on women's.

112
00:06:21,740 --> 00:06:22,950
And one more for the code.

113
00:06:24,690 --> 00:06:35,660
Change it to an action and say on Coach tab perfect what I'm gonna do is right click this league Visi

114
00:06:35,720 --> 00:06:41,040
and the document outline make sure that I get rid of this woman's tact because remember how I accidently

115
00:06:41,040 --> 00:06:43,630
made it an Ivy outlet and then I deleted it from the code.

116
00:06:43,650 --> 00:06:47,270
Remember every time you delete it from the code you have to go over here and delete it as well too.

117
00:06:47,310 --> 00:06:51,220
From the document not line in Interface Builder that would have been a crash or app.

118
00:06:51,240 --> 00:06:53,430
And I just saved you from crashing your app.

119
00:06:53,450 --> 00:06:53,840
OK.

120
00:06:53,970 --> 00:06:57,320
Well it was my app and I'm scratching it but OK.

121
00:06:57,330 --> 00:06:58,340
So this is looking good.

122
00:06:58,410 --> 00:07:03,800
Let's go ahead and close the assistant editor and let's go into league visi.

123
00:07:03,960 --> 00:07:07,990
All right thinking aloud here so the idea is a user comes to the screen.

124
00:07:08,100 --> 00:07:13,750
They select an option when they select an option the next button becomes enabled.

125
00:07:13,920 --> 00:07:14,400
OK.

126
00:07:14,460 --> 00:07:17,700
And then then they can move on to the next screen.

127
00:07:17,730 --> 00:07:18,760
That sounds good to me.

128
00:07:18,870 --> 00:07:20,740
Let's just do some clean up here.

129
00:07:22,130 --> 00:07:22,730
Cool.

130
00:07:23,060 --> 00:07:27,630
So the information how are we going to store it we're going to make it a very we'll pass it on.

131
00:07:27,620 --> 00:07:30,500
Well what I think we need to do is actually create a model.

132
00:07:30,500 --> 00:07:32,800
All right let's go to the model folder here.

133
00:07:33,020 --> 00:07:35,630
We're going to create a new model here called player.

134
00:07:35,720 --> 00:07:40,210
You're a player in the in the app and there's different data that it's going to store.

135
00:07:40,310 --> 00:07:40,740
OK.

136
00:07:40,790 --> 00:07:46,130
So MTS with files fine whenever you're creating model files or just data files with with just swift

137
00:07:46,130 --> 00:07:49,010
only stuff use blanks with file and import foundation.

138
00:07:49,010 --> 00:07:50,730
No need to import it.

139
00:07:51,050 --> 00:07:56,220
And what we're going to do is we're going to call this player.

140
00:07:57,110 --> 00:07:58,830
Okay great.

141
00:07:58,830 --> 00:08:03,180
And what we can do is we're in a create a struct and we're going to call this player.

142
00:08:03,630 --> 00:08:07,600
Should use a struct and when should use a class will always always always use a struct whenever you

143
00:08:07,600 --> 00:08:08,120
can.

144
00:08:08,290 --> 00:08:08,780
OK.

145
00:08:08,830 --> 00:08:13,740
So use a struct when using default swap type strings and things like that.

146
00:08:14,050 --> 00:08:18,100
Use a class when you have to do have to have custom things implemented.

147
00:08:18,140 --> 00:08:24,250
You know your own custom classes so that hold other classes or custom objects like that but a struct

148
00:08:25,090 --> 00:08:26,650
is a value type OK.

149
00:08:26,710 --> 00:08:32,110
And so it can be copied over directly versus a class which is an object stored in memory and you can't

150
00:08:32,110 --> 00:08:33,020
copy it.

151
00:08:33,220 --> 00:08:38,250
And so use a struct whenever you can because they're faster much much faster so we're going to save

152
00:08:38,260 --> 00:08:41,730
our much faster than a class so far.

153
00:08:41,730 --> 00:08:42,710
And what do we want to do.

154
00:08:42,710 --> 00:08:44,590
We want to store the league.

155
00:08:44,590 --> 00:08:52,720
So let's just say Selected of called desired league go because that's what I haven't named the image

156
00:08:52,720 --> 00:08:55,330
so desired league and we'll make it a string.

157
00:08:55,330 --> 00:08:56,870
So right now it's an empty string.

158
00:08:57,100 --> 00:08:58,300
OK.

159
00:08:58,370 --> 00:08:59,490
Or you know what.

160
00:08:59,560 --> 00:09:01,950
Let's just actually make it an optional.

161
00:09:02,080 --> 00:09:08,500
So we're going to say string optional Ambar and we're going to say these are leagues in the middle and

162
00:09:08,560 --> 00:09:17,120
the skill level so selected skill level and we'll call this a string as well to that's looking good

163
00:09:17,120 --> 00:09:17,710
there.

164
00:09:17,950 --> 00:09:18,220
OK.

165
00:09:18,230 --> 00:09:20,180
So desired leagues like that skill level.

166
00:09:20,210 --> 00:09:20,760
Cool.

167
00:09:20,820 --> 00:09:24,270
And what we're going to do is here in our league visi.

168
00:09:24,430 --> 00:09:25,250
OK.

169
00:09:25,580 --> 00:09:30,350
We're going to create a player will declare at the top that's the keyword right there.

170
00:09:30,350 --> 00:09:35,150
Declare is when you declare a variable but not necessarily initialize it.

171
00:09:35,150 --> 00:09:41,200
So what we're going to do is we're going to say bar and then we're going to say player of type player

172
00:09:41,510 --> 00:09:47,310
and let's make this and implicitly unwrapped optional.

173
00:09:47,360 --> 00:09:53,090
And the reason why we want to make it implicit is because we don't want this code to even run unless

174
00:09:53,090 --> 00:09:53,940
there's a player.

175
00:09:54,110 --> 00:09:54,710
OK.

176
00:09:54,850 --> 00:10:00,710
And so we make it an option on what we can do is here in view to load all we have to do is initialize

177
00:10:00,710 --> 00:10:06,940
it we can say player equals player and that's how you initialize a struct with the two parentheses there

178
00:10:06,950 --> 00:10:07,800
like so.

179
00:10:08,000 --> 00:10:12,310
So when you did load occurs and it's going to create a new player.

180
00:10:12,350 --> 00:10:13,130
All right.

181
00:10:13,510 --> 00:10:18,200
And so what we have here is we've got a model that can store data and then eventually we'll pass this

182
00:10:18,200 --> 00:10:19,660
data onto another controller.

183
00:10:19,670 --> 00:10:21,800
But first let's go ahead and handle the logic.

184
00:10:22,100 --> 00:10:26,660
So on men's tapped on woman's tap uncoded tapped What do we need to do.

185
00:10:26,660 --> 00:10:31,640
All right well let's go ahead and write it out so when the men's button is tapped all we need to do

186
00:10:31,640 --> 00:10:35,270
is say player Daut desired league.

187
00:10:36,200 --> 00:10:38,830
They say equals minutes.

188
00:10:38,900 --> 00:10:39,090
All right.

189
00:10:39,080 --> 00:10:41,030
That's just a variable I'm creating.

190
00:10:41,030 --> 00:10:44,490
This is something that's going to let us know hey they selected the HENSLEE.

191
00:10:44,700 --> 00:10:55,040
All right and here you can say player desirably equals women's All right in here player desired league

192
00:10:55,580 --> 00:10:56,970
equals coed.

193
00:10:57,300 --> 00:10:57,770
OK.

194
00:10:58,100 --> 00:10:59,640
So far so good.

195
00:10:59,660 --> 00:11:05,030
So when each of these buttons is tapped Let's go ahead and in this struct here let's set the variable

196
00:11:05,390 --> 00:11:07,700
of the desired league to whatever it needs to be.

197
00:11:07,790 --> 00:11:14,020
And then of course in each one we want to enable that next button right so we say the next button dot

198
00:11:14,870 --> 00:11:19,130
enabled is enabled equals let's say true.

199
00:11:19,690 --> 00:11:20,800
OK.

200
00:11:20,930 --> 00:11:26,000
And you know we could copy this like so and like so.

201
00:11:26,360 --> 00:11:33,730
But what very important principle that I teach you that we are violating what Principal redialing we're

202
00:11:33,740 --> 00:11:37,510
violating the principal look at this next but next what next button on this.

203
00:11:37,560 --> 00:11:41,690
The reason why we don't want to beat herself is because this could introduce logic errors like what

204
00:11:41,690 --> 00:11:46,370
if a programmer accidentally has or going through doing this three times or maybe 10 times they said

205
00:11:46,370 --> 00:11:46,880
false.

206
00:11:46,960 --> 00:11:51,890
There's that autocomplete and that false and now there's a logic error so there's things like that that

207
00:11:51,890 --> 00:11:52,540
can happen.

208
00:11:52,580 --> 00:11:57,380
And so what we want to do is we just want to we want to clean this up a little bit we want to refactor

209
00:11:57,380 --> 00:11:58,320
make it mo better.

210
00:11:58,400 --> 00:12:03,800
So what we're going to do is right here I'm going to create a function here and we're going to call

211
00:12:05,190 --> 00:12:07,180
select leak.

212
00:12:07,390 --> 00:12:07,920
OK.

213
00:12:08,150 --> 00:12:15,440
And for the parameters we want to pass in the league type so to say League type and this is going to

214
00:12:15,440 --> 00:12:16,430
be of type string.

215
00:12:17,430 --> 00:12:17,950
All right.

216
00:12:18,240 --> 00:12:20,420
And let's make our function here.

217
00:12:20,440 --> 00:12:22,290
Oh I forgot to add the word function.

218
00:12:22,290 --> 00:12:23,250
There we go.

219
00:12:23,690 --> 00:12:24,680
OK.

220
00:12:25,170 --> 00:12:30,850
So there's the parameter and what we'll do here is we will say player desirably equals League type.

221
00:12:31,200 --> 00:12:36,630
OK so we're going to pass in the league type into this function and then it'll set it here and then

222
00:12:36,630 --> 00:12:42,030
waltz then we'll say the next button is enabled equals true.

223
00:12:42,270 --> 00:12:52,860
OK and now what we can do is we can say select League Pass in men's K and then in this one something

224
00:12:52,860 --> 00:12:55,970
similar or select league and pass in winnings.

225
00:12:56,550 --> 00:12:57,010
OK.

226
00:12:57,180 --> 00:12:59,800
And in this one will do the same thing.

227
00:12:59,850 --> 00:13:13,150
So select select league and we'll pass in the word coed and let's clean this up.

228
00:13:14,060 --> 00:13:18,400
And so now what we've done is we've we've clean this up a little bit so the next buttons only being

229
00:13:18,430 --> 00:13:21,640
set once and then these functions are passing in their various data.

230
00:13:21,640 --> 00:13:23,160
And this is what I was telling you about earlier.

231
00:13:23,170 --> 00:13:27,760
I try to never ever ever have logic built into Iby actions.

232
00:13:27,760 --> 00:13:28,170
OK.

233
00:13:28,180 --> 00:13:32,930
Logic's happening here and the actions just trigger what button was pressed.

234
00:13:32,940 --> 00:13:34,630
And how do we need to act accordingly.

235
00:13:34,720 --> 00:13:40,100
OK so what's happened so far is a user has tapped something and the next button is now enabled.

236
00:13:40,240 --> 00:13:40,910
OK.

237
00:13:41,200 --> 00:13:45,370
One thing I do want to do though is I want to uncomment this just to make sure the next button doesn't

238
00:13:45,370 --> 00:13:48,570
even work without pressing one of these buttons.

239
00:13:48,580 --> 00:13:55,890
Let's go ahead and run the app and see OK our app has loaded and what we want to do is click get started.

240
00:13:55,910 --> 00:13:57,890
And so this should not work.

241
00:13:57,890 --> 00:13:59,720
Remember we wrote code to load the next screen.

242
00:13:59,780 --> 00:14:04,640
So when I click this nothing should happen and it's not so that's a good sign.

243
00:14:04,640 --> 00:14:07,340
Now what I want to do is uncomment this here.

244
00:14:09,010 --> 00:14:10,850
And let's rerun the app.

245
00:14:10,980 --> 00:14:16,750
And what I want to do I guess I didn't need to comment today at all what I want to do now is when I

246
00:14:16,750 --> 00:14:22,090
select a league then it lets me go to the next one so right now I can't do anything but when I click

247
00:14:22,150 --> 00:14:27,310
Menz for instance then we can go ahead and say next and boom there we have it.

248
00:14:27,310 --> 00:14:29,260
So that's looking really good right there.

249
00:14:29,280 --> 00:14:29,820
Cool.

250
00:14:31,270 --> 00:14:32,450
Making good progress.

251
00:14:32,620 --> 00:14:34,320
So so far so good.

252
00:14:34,480 --> 00:14:39,820
Let's talk about what we've done here is we've created Iby actions for the different buttons and we've

253
00:14:39,820 --> 00:14:43,850
created a function called select league where we pass in the league that was selected and then we just

254
00:14:44,380 --> 00:14:49,630
enable the next button so they can go forward and then everything works as normal We've also created

255
00:14:49,630 --> 00:14:50,550
a struct here.

256
00:14:50,650 --> 00:14:54,130
OK we started building a model for application and you'll do this.

257
00:14:54,140 --> 00:14:55,060
OK.

258
00:14:55,510 --> 00:14:58,790
We might not have had to made a model meaning here in the welcome box.

259
00:14:58,970 --> 00:14:59,680
OK.

260
00:14:59,730 --> 00:15:06,010
Or excuse me in the league b c we could have made variables here we could have said var desired league

261
00:15:06,100 --> 00:15:10,420
of type you know type of string right we could have done that and then one for the skill level and then

262
00:15:10,420 --> 00:15:14,350
we get past those onto the next view controller that starts becoming really nasty when you have multiple

263
00:15:14,350 --> 00:15:15,770
variables.

264
00:15:16,020 --> 00:15:19,230
Everything that you want to do in your apps you want to build around models.

265
00:15:19,250 --> 00:15:20,590
And so here's a protip.

266
00:15:20,860 --> 00:15:21,950
OK.

267
00:15:22,570 --> 00:15:26,740
Protip is if you haven't built a model in your app you're doing it wrong.

268
00:15:26,820 --> 00:15:27,360
OK.

269
00:15:27,520 --> 00:15:33,700
Every piece of data that you need in your app should either be in a class or a struct should be grouped

270
00:15:33,700 --> 00:15:34,080
together.

271
00:15:34,090 --> 00:15:41,320
So that's the protip all of the data in your app should always be always always always always be put

272
00:15:41,320 --> 00:15:42,960
into a struct or a class.

273
00:15:42,970 --> 00:15:43,460
OK.

274
00:15:43,600 --> 00:15:45,570
So that's why we created the player.

275
00:15:45,580 --> 00:15:49,990
It's reusable it's testable it's safer it's cleaner.

276
00:15:50,080 --> 00:15:53,140
No I don't want to close the project Stop OK.

277
00:15:53,150 --> 00:15:54,960
So let's go ahead and call this video done.

278
00:15:54,960 --> 00:15:58,780
We've made some good progress here you've written some code we've started to build out some logic and

279
00:15:58,780 --> 00:16:03,450
then the next idea what we'll do is we will learn how to pass data from one view controller to another

280
00:16:03,450 --> 00:16:05,210
so they can then operate on it etc..

281
00:16:05,220 --> 00:16:05,880
So that's it for now.

282
00:16:05,880 --> 00:16:08,790
Mark Price at DEF slopes dotcom moving non-ID forward.

