How Do You Write Closures in Swift?

  Рет қаралды 113,227

Lets Build That App

Lets Build That App

Күн бұрын

Closures are used everywhere in Swift and the UIKit APIs that we have access to. Today we'll go through a simple exercise of how to write and apply closures by going through a simple algorithm exercise. This lesson covers how to write filtering functions using closures to make our programs more robust. Have fun.
Instagram Firebase Course
www.letsbuildt...
Facebook Group
/ 1240636442694543
iOS Basic Training Course
www.letsbuildt...
Completed Source Code
www.letsbuildt...
Follow me on Twitter: / buildthatapp

Пікірлер: 180
@PedrocaRicardo
@PedrocaRicardo 6 жыл бұрын
FINALLY someone who made me understand closures, thank you!
@kennram-code2941
@kennram-code2941 2 жыл бұрын
totally agree - was completely lost until I saw this vid.
@mutasemwahbeh6954
@mutasemwahbeh6954 3 жыл бұрын
Eventually someone decided to make closure understandable and easy to use thank you sir !
@antonlebedev2890
@antonlebedev2890 Жыл бұрын
Now I seem to be getting pretty much closer to the point of understanding WHY do we need closures)) Thanks a lot!
@kaiseration
@kaiseration 5 жыл бұрын
I just tested this code: func filterWithPredicateClosure(closure: (Int) -> Bool, numbers: [Int]) -> [Int]{ let greater = numbers.filter(closure) return greater } filterWithPredicateClosure(closure: { return $0 > 6 }, numbers: [1,2,3,4,5,10]) It successfully run. :D Thanks Brian.
@emindeniz
@emindeniz 5 жыл бұрын
Best tutorial for Closures so far. Thank you man.
@arrinal
@arrinal 3 жыл бұрын
Bro... you save me from understanding closure! Thanks a lot!
@generalk9947
@generalk9947 7 жыл бұрын
I am starting university in a couple weeks and by previously watching ur top quality videos on software engineering u have really inspired me to take this course even more because I now realise the many things you can do as a software engineer especially creating apps and how much you can potentially earn thanks👌🏾
@avisekhon5915
@avisekhon5915 7 жыл бұрын
Hi Brian, great video. However I think you should have mentioned trailing closures too, as it simplifies the code quite a bit. func greaterThanPredicateClosure(numbers: [Int], closure: (Int) -> Bool) -> [Int]{ // body } let result = greaterThanPredicateClosure([1, 2, 3, 4, 5], { value in return value > 5 }) Here, we use the weird closure as parameter syntax. let result = greaterThanPredicateClosure([1, 2, 3, 4, 5]){ value in return value > 5 } Here, we use the trailing closure syntax, where if a closure is the last parameter of a function, it can be written outside the function parenthesis, making it easier to read. Other than that, I liked the video.
@diegogarciar
@diegogarciar 7 жыл бұрын
you can even reduce it to {$0>5}
@avisekhon5915
@avisekhon5915 7 жыл бұрын
Yes, I didn't mention that because it'd be confusing for beginners. I believe only the first two parameters get values like that ($0 and $1) or does it extend to the number of parameters the closure has ($0...$n)?
@moussahaidous6872
@moussahaidous6872 7 жыл бұрын
i believe it does expand to $n
@dacypher22
@dacypher22 6 жыл бұрын
Avi Sekhon Ahhh. I am a professional programmer but am just trying to learn Swift and iOS development for the first time. I was trying to fill out an autocompleted method call and XCode kept switching it to this format and I was so confused. That is really some weird syntax for someone coming from JS, Java, C#, etc.
@brod515
@brod515 6 жыл бұрын
I really don't think that's easier to read ; I truly believe that's far more confusing to read
@developerios6096
@developerios6096 7 жыл бұрын
I love these kind of videos, where you explore the code syntax for advanced stuff. Nice and clean, thank you brian!
@DrZiggyzoo1
@DrZiggyzoo1 7 жыл бұрын
6:54 "You probably don't want to name your functions as long as this." I would disagree with that to an extent. You can either have a vague function name and comments, which will more than likely not get updated if someone changes the code. Or you can have a longer, but more meaningful function name that actually explains what is happening. A good example of this is a guy I used to work with. He hates how comments always become out of date and doesn't use them too much. So instead, he uses longer, but more meaningful function names. We once made fun of him because he had a function name that was close to twice as long as filterWithPredicateCondition(). But on the flip side, everyone who looked at the function knew it's exact purpose.
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
True, I'm also in the camp for longer function names as long as it makes grammatical sense.
@bureaucraticfelcher8357
@bureaucraticfelcher8357 4 жыл бұрын
Agree, self documenting code is better than commenting document/explanation.
@Pedruchito
@Pedruchito 4 жыл бұрын
Thank you very much for making this tutorial video and, for making it with simple explanations so I can understand it. I love it !!
@albaqawi
@albaqawi 7 жыл бұрын
Hi Brian, great video! how about a follow up with closures that contain important keywords like @escaping in Swift?
@lostintheheatofitall
@lostintheheatofitall 6 жыл бұрын
please
@andresraigoza2082
@andresraigoza2082 3 жыл бұрын
You are a great teacher. Thank you
@maxgebhardt6213
@maxgebhardt6213 4 жыл бұрын
One of my favorite youtubers! Awesome stuff!
@supriyajagtap4050
@supriyajagtap4050 3 жыл бұрын
Nicely explained 🤩, thank you
@israman30
@israman30 7 жыл бұрын
Beautiful closure explanation..!! Thank you!
@vigneshwaran6348
@vigneshwaran6348 4 жыл бұрын
good explanation thanks. why are they use some times escaping key word and why we are put front of the parameter _ these symbol like _escaping
@rohanghorpade2894
@rohanghorpade2894 5 жыл бұрын
Best tutorial on closures !!!! I want to learn more about @escaping closures.
@---ml4jd
@---ml4jd 4 жыл бұрын
nice work with the audio, real pro level stuff.
@Noahnrg22
@Noahnrg22 7 жыл бұрын
Another great video, everyday you surprise me with what I can learn, thanks !!
@akashskumar6389
@akashskumar6389 2 жыл бұрын
finally understood closures:)
@BreatheDigital
@BreatheDigital 6 жыл бұрын
Really needed this! Many thanks! You have yourself a new subscriber.
@markdang3379
@markdang3379 6 жыл бұрын
Your videos are so helpful. Very clear and informative. Thank you!!!
@AudriezWorld
@AudriezWorld 5 жыл бұрын
Thanks man. Very helpful
@liminal18
@liminal18 7 жыл бұрын
Thanks paused the video and used a closure to solve some mases in that ios swift game. Was a lot of fun.
@codinggyaan2570
@codinggyaan2570 3 жыл бұрын
Nicely Explained
@moenaim8672
@moenaim8672 5 жыл бұрын
too much thanks for you'r hard work
@jonaseduardo01
@jonaseduardo01 5 жыл бұрын
Nice explanation , I've been watching tutorials about this in the last days , I thinks that is a very useful concept
@ashleighgray4291
@ashleighgray4291 7 жыл бұрын
THE NEW KZbin UPDATE IS AMAZING!!!!
@shayan_ecksdee
@shayan_ecksdee 7 жыл бұрын
Hunter Gray are you using phone or pc
@HairyPixels
@HairyPixels 7 жыл бұрын
Yet another pointless changes I need to learn.
@albaqawi
@albaqawi 7 жыл бұрын
I agree outstanding material design layout! finally they used it
@sampep
@sampep 4 жыл бұрын
Amazing! Big thanks!
@martian7691
@martian7691 7 жыл бұрын
Kind of syntax used in Parse and firebase for querying I guess, also using clousures for completion handlers but with no returned values because they are async.
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
+Misael Garay yes this is pretty much how the parse and firebase completion handlers are written. Hope you can use this knowledge in your own apps
@-kkkirito5658
@-kkkirito5658 6 жыл бұрын
Hi Brian, really need a lesson of weak self and strong self in swift and how to avoid the memory leak in closures. Many thanks!
@lifestoriesbook
@lifestoriesbook 6 жыл бұрын
One of the best videos of using closures in a simple way.Great One Thanks.But do you know any source for going in depth.
@manickamt127
@manickamt127 4 жыл бұрын
This was wonderful explanation. I’ll use my code with closure an upcoming days 🙂🙂
@SevenDeMagnus
@SevenDeMagnus 6 жыл бұрын
Hi. Thanks Brian and Apple for creating closures. It's less typing when you need to modify some logic. The closure within a closure is like a dream within a dream within a dream- Inception movie:-) God bless Proverbs 31
@vjatseslav.p.8173
@vjatseslav.p.8173 6 жыл бұрын
Hi Brian, I think it would be also nice to say about short-way syntax of closures. For example: func closureTest(closure: (Int) -> Bool, array: [Int]) -> [Int]{ return array.filter(closure) } let result1 = closureTest(closure: {(num) -> Bool in return num > 4 }, array: [1,4,5,6,7,8]) let result = closureTest(closure: {$0 > 4}, array: [1,4,5,6,7,8]) I think it's obvious, that short-way syntax much more comfortable for using in code.
@bitsurfer0101
@bitsurfer0101 3 жыл бұрын
I don't like the short-hand method since it seems a bit lazy and harder to read. It's a nice idea though
@drewster6981
@drewster6981 6 жыл бұрын
Brilliant. Really good explanation of closures.
@bitsurfer0101
@bitsurfer0101 3 жыл бұрын
If you are appending the filtered values to the array, do you need to clear out the array every time you call the function?
@jonas14812
@jonas14812 4 жыл бұрын
Very clear and informative, thank you! 😇
@augustogalindo8687
@augustogalindo8687 3 жыл бұрын
I was reading the closures section in the Swift Guide in Apple Books, didn’t search anything about it but suddenly this video popped up in recommendations. I hope it is just coincidence
@sashamakedonskii
@sashamakedonskii 7 жыл бұрын
Hi brian! Nice explanation of closures! It will be nice to see the `Generics` tutorial. Thanks
@huqiao
@huqiao 7 жыл бұрын
Totally agree, a tutorial on generics would be wonderful !
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
+Qiao Hu I believe the lessons on stacks and generics shows you how to use em
@marie-pascalechauvel9169
@marie-pascalechauvel9169 6 жыл бұрын
This video is so helpful. Thanks for posting it!
@andreasbagias4334
@andreasbagias4334 7 жыл бұрын
Hello. Interesting video. I have never used closures like that. Mostly for async tasks so far. Will try to integrate a few of your examples in my future projects. Cheers.
@KouroshPiano
@KouroshPiano 7 жыл бұрын
Great video. Keep it up Brian ✌🏼
@shubhambairagi4942
@shubhambairagi4942 5 жыл бұрын
Hey Brian, I follow your videos to make my code robust and reach to standard. Can you please make a video to clarify the difference between Array and Set.
@LetsBuildThatApp
@LetsBuildThatApp 5 жыл бұрын
A set is a collection of items without ordering, whereas an array is sequenced.
@nhantrivinh
@nhantrivinh 7 жыл бұрын
Great video Brian as always! Thank you for videos they are really awesome! At the moment I am very curious about how to handle uploading multiple images. I think this will be a great topic. Please let me know your thoughts!
@RM-di6oe
@RM-di6oe 5 жыл бұрын
Sir its awesome thanks for your contribution for making our future bright...
@vbuddy8
@vbuddy8 4 жыл бұрын
Love your videos! Been helping me so so much. I don't like how you panned the audio though (: Still thumbs up for being so awesome
@Quant15
@Quant15 6 жыл бұрын
Hi Brian! Thanks for explanation. One more question - what about unwoned and weak references -> do we need to use them in every closure?
@shuks1337
@shuks1337 3 жыл бұрын
you saved me, thanks a lot
@weitang9727
@weitang9727 7 жыл бұрын
Great tutorial, thank you Brian
@anshuiphonedevswiftandswif2107
@anshuiphonedevswiftandswif2107 4 жыл бұрын
Nice but still I have a doubts when we can use function and when we can use closure and completion handlers . Y we have to use those
@septronic2010
@septronic2010 7 жыл бұрын
Another really useful tutorial! Thanks a lot
@caragold9329
@caragold9329 4 жыл бұрын
Thank you! It was extremely helpful))
@zarioiubogdan1164
@zarioiubogdan1164 7 жыл бұрын
This was really helpful. Thank you!
@Vankien96
@Vankien96 7 жыл бұрын
Thanks so much .helpful tutorial
@alekseidanilov9279
@alekseidanilov9279 7 жыл бұрын
very cool lesson, thank you!!!
@cuongcuong6848
@cuongcuong6848 6 жыл бұрын
please introduce some of the best free books for swift learning??
@MrSenChoi
@MrSenChoi 3 жыл бұрын
It seems Apple releases swift book on every update. Search “the swift programming language” in bookstore in Apple Books app.
@SevenDeMagnus
@SevenDeMagnus 4 жыл бұрын
Cool, thanks.
@stevengao8345
@stevengao8345 6 жыл бұрын
nicely explained, can't wait for you to talk about Generics in the future : )
@stevengao8345
@stevengao8345 6 жыл бұрын
within closures, i see lots of time people use [weak self] to prevent retain cycle, i mean how do we figure out if inside a closure there is a retain cycle ? can you explain more about it in you future tutorial ? thanks very much
@amizan8653
@amizan8653 6 жыл бұрын
Great video, thanks for posting!
@longh
@longh 3 жыл бұрын
Thanks a lot!
@manickamt127
@manickamt127 4 жыл бұрын
I need to load the chat data for tableview. I have already used fetched results controller for getting the data . 1. Let me just explain how can I load bunch of data while scrolling to top 2. While I come friend list, how much data can I load to chat page on first time
@jackshihtaken
@jackshihtaken 6 жыл бұрын
Hey great video, but doesn't Swift already have a built in collection function called Filter?
@kaistasch4028
@kaistasch4028 7 жыл бұрын
Thanks a lot Brian!
@hermankster4914
@hermankster4914 7 жыл бұрын
Love your videos! I'm currently learning Swift but lately have been hearing a lot about Progressive Web Applications and honestly a it does scare beginners like me learning IOS programming when people keep saying this might replace it. Can you do a video on it? I'm sure you've been hearing it a lot lately
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
PWA was supposed to replace native 10 years ago.....
@hermankster4914
@hermankster4914 7 жыл бұрын
I've been learning swift for about 3 months now and lately it's just been popping up on my youtube feed. It just gets a bit scary while you're learning native apps and these things keep popping up saying it'll replace native apps...
@hermankster4914
@hermankster4914 7 жыл бұрын
The most recent one is posted yesterday by CodingTech
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
You'll get used to this in software with every new framework that comes out
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
Yep and wont be the last.
@bs5920
@bs5920 7 жыл бұрын
Hey Brian! Thanks for the video. I am new to Swift and the concept of closures and I have a question. Wouldn't it be more sensible to create an extension on Array for this purpose? Something like: extension Array { func filterList(_ isIncluded: (Element) -> Bool) -> [Element] { var result = [Element]() for x in self where isIncluded(x) { result.append(x) } return result } } So you could call it via dot notation on your Array: let filteredList = [1, 2, 3, 4, 5, 6, 7, 8].filterList { $0 > 3 } Thanks in advance!
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
As you might or might not know already, Swift already comes with the filter function out of the box for arrays. The idea of closures applies to a much broader and generic programming paradigm. Today's lesson was simply an introduction on how to write out the syntax.
@bs5920
@bs5920 7 жыл бұрын
Lets Build That App Thank you very much! As I'm pretty new to programming, with Swift being my first programming language (actually studying life sciences), I'm learning tons of new stuff every day and your videos help me out a lot.
@bitsurfer0101
@bitsurfer0101 3 жыл бұрын
@@LetsBuildThatApp How could you use the sort function if you are using a struct and are sorting one or more of the variables?
@MrBlaq
@MrBlaq 7 жыл бұрын
Does Swift have anything similar to "Promises" or "async/await" in Javascript? And would it be possible to get a tutorial on the "dispatch" function in the future?
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
+MrBlaq there is a third party pod that lets you use promises
@Cdswjp
@Cdswjp 6 жыл бұрын
You’re the man brother
@kelvinyan2709
@kelvinyan2709 7 жыл бұрын
Hi Brian, could you tell me which microphone you use?
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
+Kelvin Yan it's a rode nt1a mic
@hareeshgangadhara415
@hareeshgangadhara415 4 жыл бұрын
You're rocking voong
@cxn_media
@cxn_media 5 жыл бұрын
I think you should use white background and black text in editor for better visual.
@LetsBuildThatApp
@LetsBuildThatApp 5 жыл бұрын
If you're 40+ then you use white background, everyone else uses black now.
@prahaladdemo6902
@prahaladdemo6902 7 жыл бұрын
Your video is very lenthy for downloading
@SalesforceMiind
@SalesforceMiind 6 жыл бұрын
nicely explained
@stanymiles
@stanymiles 7 жыл бұрын
This was superuseful!!!
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
Indeed, glad you enjoyed these more advanced concepts of Swift.
@joca251078
@joca251078 7 жыл бұрын
Difficult to understand, but amazing.
@midnytromeo
@midnytromeo 7 жыл бұрын
You're a inspiration.
@annaxia3237
@annaxia3237 3 жыл бұрын
Thanks!!!
@giovanniofficial1666
@giovanniofficial1666 4 жыл бұрын
Hi I would like to know if you do you're video from taiwan or somewhere else I can see in most video in background taiwan picture
@LetsBuildThatApp
@LetsBuildThatApp 4 жыл бұрын
Vacation videos from taiwan
@giovanniofficial1666
@giovanniofficial1666 4 жыл бұрын
@@LetsBuildThatApp amazing if you pass by again let me know I invited you for a drink. I'm in Taipei city, An icon of swift like you that's insane. ;)
@richardwalters9249
@richardwalters9249 3 жыл бұрын
Trying to identify key components of closures: (a) the struct/func/etc. that defines the closure signature will also be the caller the closure; (b) the closure definer (or where the closure body is implemented) is where the exact VALUES for the parameters are located. This guy MUST match the defined signature, but he gets to define the implementation of the closure against the values in his scope.
@HieuLe-mz2lb
@HieuLe-mz2lb 7 жыл бұрын
so cool, you are awesome !
@VasaMusic438
@VasaMusic438 4 жыл бұрын
closures complicate very much for few advantages is it right?
@irynasherepot9882
@irynasherepot9882 4 жыл бұрын
Is my internet slow or the video is blurry? Tried in different browsers
@ayyanchira
@ayyanchira 5 жыл бұрын
Nicely explained... but still why is this closures so difficult to understand!
@patrickh7721
@patrickh7721 5 жыл бұрын
I think it's kinda like function pointer
@VasaMusic438
@VasaMusic438 4 жыл бұрын
basically are useless..... bring some part of C++ in Swift is a very bad procedure
@kayeshabhi
@kayeshabhi 3 жыл бұрын
Thank you
@murad3460
@murad3460 7 жыл бұрын
Will there be more project tutorials like Twitter feed in IOS?
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
+John Galew I've stopped producing the Twitter feed videos
@murad3460
@murad3460 7 жыл бұрын
Excuse my vagueness,i meant tutorials Like Twitter and Audible
@waltersumofan
@waltersumofan 7 жыл бұрын
If the array is left as [10,5,1,2,0] you get from the modulus [10,5,0] rather than the expected [10,5]. Can you explain that and what to do to weed it out? I understand the modulus but how to return it without the zero? Thanks
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
0 is divisible by 5 no?
@waltersumofan
@waltersumofan 7 жыл бұрын
As I said, I understand the modulus. Any value divided into zero produces zero which makes the value true so it adds it to the array. I'm asking how to produce [10,5] and avoid the [10,5,0] result. Cheers.
@waltersumofan
@waltersumofan 7 жыл бұрын
Would I just test if value != 0 but where to put it? How to skip 0 or how to ignore it?
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
+waltersumofan yeah your filter function would check for AND not equal zero
@waltersumofan
@waltersumofan 7 жыл бұрын
Thanks
@Gojam12
@Gojam12 6 жыл бұрын
When I enter this into playground and do what you did press the run button I only get the response ready at the top and no results, this is exactly how I run ios apps is there something different going on in playgrounds?
@Gojam12
@Gojam12 6 жыл бұрын
Never mind see it
@marcaupont9145
@marcaupont9145 7 жыл бұрын
Awesome awesome vid!!!!
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
You're awesome too Marc!
@Traoreee
@Traoreee 7 жыл бұрын
How do you make selected codes to //comment?? What is the shortcut?
@laiqueahmed6613
@laiqueahmed6613 7 жыл бұрын
nice video . Thanx!!
@CardinalHijack
@CardinalHijack 7 жыл бұрын
Are you back in the States Brian?
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
Yeah, back in the States again and hopefully no more traveling.
@CardinalHijack
@CardinalHijack 7 жыл бұрын
sweet. great vid btw, very well explained.
@cinquain0
@cinquain0 5 жыл бұрын
How come playground didn't ask for a value parameter when he implemented it as a closure.... It did for mine...
@dambar011
@dambar011 3 жыл бұрын
Great
@lostintheheatofitall
@lostintheheatofitall 6 жыл бұрын
Why do you have to end the variable "filteredSetOfNumbers" with () ?
@LetsBuildThatApp
@LetsBuildThatApp 6 жыл бұрын
This is how we use closures.
@Mr_Jai_Kalra
@Mr_Jai_Kalra 5 жыл бұрын
superb
@gjermundification
@gjermundification 6 жыл бұрын
6:02 There is no Editor -> Refactor -> Rename ... in playgrounds?
@mukulsharma150
@mukulsharma150 7 жыл бұрын
Mast YAAR
@nkmewara3988
@nkmewara3988 7 жыл бұрын
Hi... Brian.... I have a problem how I code for universal application.. because i facing a size problem with ipad... Sorry about my English
@awaiskhalid7536
@awaiskhalid7536 7 жыл бұрын
use size classes
@Noahnrg22
@Noahnrg22 7 жыл бұрын
NK mewara use auto layout constraints & set your target for Universal instead of iPhone or IPad
@nkmewara3988
@nkmewara3988 7 жыл бұрын
I don't want to use auto layout constraints... I just want pure code... Like @brain
@nkmewara3988
@nkmewara3988 7 жыл бұрын
Any tutorial about size classes.. I'm quite new in ios development..
@LetsBuildThatApp
@LetsBuildThatApp 7 жыл бұрын
Anchors in code is part of AutoLayout, just FYI.
Introductions to Closures in Swift
25:02
Stewart Lynch
Рет қаралды 12 М.
Kluster Duo #настольныеигры #boardgames #игры #games #настолки #настольные_игры
00:47
This mother's baby is too unreliable.
00:13
FUNNY XIAOTING 666
Рет қаралды 38 МЛН
Don't look down on anyone#devil  #lilith  #funny  #shorts
00:12
Devil Lilith
Рет қаралды 45 МЛН
Кәсіпқой бокс | Жәнібек Әлімханұлы - Андрей Михайлович
48:57
Advanced Swift: Making Programmatic Auto Layout Easy through Extensions
25:38
Swift Closures Explained
14:23
Sean Allen
Рет қаралды 65 М.
When to Semaphore vs Dispatch Group! Careful Multithreaded Shared Resource
11:11
How to use escaping closures in Swift | Continued Learning #20
21:56
Swiftful Thinking
Рет қаралды 20 М.
Understanding Swift Trailing Closure Syntax
29:32
Stewart Lynch
Рет қаралды 3,7 М.
3 MISTAKES to avoid when using closures in Swift 😌
5:02
Vincent Pradeilles
Рет қаралды 4,7 М.
Why Signals Are Better Than React Hooks
16:30
Web Dev Simplified
Рет қаралды 480 М.
STOP Learning These Programming Languages (for Beginners)
5:25
Andy Sterkowitz
Рет қаралды 706 М.
How to Solve Coding Problems (the best way to learn)
12:29
Aaron Jack
Рет қаралды 238 М.
Kluster Duo #настольныеигры #boardgames #игры #games #настолки #настольные_игры
00:47