Swift API Calls for Beginners (Networking) - Async Await & JSON

  Переглядів 68,421

Sean Allen

Sean Allen

День тому

Go to squarespace.com/seanallen to save 10% off your first purchase of a website or domain using code SEANALLEN.
Learning how to write network calls as a beginner in Swift can be daunting. I remember it taking me a long time to fully grasp them. In this video I break down the basics of how network calls work and introduce you to the concept of JSON (JavaScript Object Notation).
I show you how to download data from the GitHub API with a network call and display a basic user profile page using that data. For this we use Swift Concurrency with Async Await.
This tutorial was created using Xcode 14 and iOS 16.
My iOS Dev Courses:
seanallen.teachable.com/
iOS Developer Interview Questions Playlist:
• Swift Interview Tips
Twitter:
Sean Allen - / seanallen_dev
Hired.com:
hired.com/x/1n01g
Book and learning recommendations that help out the channel if you decide to purchase (Affiliate Links):
Paul Hudson's Hacking With Swift:
gumroad.com/a/762098803
Donny Wals - Combine:
gumroad.com/a/909014131
Mark Moeyken’s SwiftUI Books:
www.bigmountainstudio.com/swiftui-views-book/fzc51
Objc.io Books (Thinking in SwiftUI & Advanced Swift):
gumroad.com/a/656585843
#swift #softwaredeveloper #iosdeveloper
Timestamps:
0:00 - Networking in iOS Apps
0:32 - This is hard!
1:06 - What is JSON?
2:06 - Using CURL to test a response
3:39 - Open API, OAuth, API Keys - Out of Scope
4:14 - My 4 Step Process for API Calls
5:10 - Using JSON to inform your design
5:46 - Create Models from JSON
9:13 - Network Call Code
18:10 - Networking Code Review
20:02 - Using the network call
22:48 - Connecting the UI

КОМЕНТАРІ: 157
@seanallen
@seanallen 11 місяців тому
Want to dive deeper into iOS development? Check out my iOS Dev courses (UIKit & SwiftUI) at seanallen.teachable.com
@abdulrb786
@abdulrb786 9 місяців тому
Really informative. If possible could you create a playlist for different type of network calls that you have encountered example of which are, dependent n/w call, paginations etc. And best ways to call them, such as using dispatch group etc. that would really help the Developer across globe as all the developer do make n/w all the time.
@FriendlyNeighborhoodBlindKiid
@FriendlyNeighborhoodBlindKiid 3 місяці тому
Is there any way that you can share a link to that file, especially because it's just a single file? I'm blind so I can't follow along with the video super well. I love how you explain the concepts, but there's a couple things with the symbols and stuff that I want to get my computer to read.
@parkerrex
@parkerrex 6 місяців тому
Coming from web world. Finally found a good creator for swift. Time to binge….
@seanallen
@seanallen 6 місяців тому
Welcome 👋. Hope you enjoy!
@pattmehta5835
@pattmehta5835 2 місяці тому
bot 😂
@GouravSinghalMusiTech
@GouravSinghalMusiTech 4 місяці тому
You should keep making videos... it should be a request from whole iOS community! Kudos to you!
@ArthasFede
@ArthasFede 3 місяці тому
Simple, quick and streigth to the point. Love this tutorial!! Thanks Sean! 🙏🏻
@seanallen
@seanallen 3 місяці тому
Glad you liked it!
@AngleIron426
@AngleIron426 9 місяців тому
I coded along and it worked beautifully! Learned a lot. Wonderful introduction to async and URL session. Thank you!
@mingy7017
@mingy7017 11 місяців тому
Thank you SO MUCH Sean this goes straight to the point and very informative and easy to follow the logic behind. Very very well conveyed! ❤
@seanallen
@seanallen 11 місяців тому
Thanks Ming! Glad you liked it.
@jaylensmith6308
@jaylensmith6308 10 місяців тому
I’m moving away from completion-type networks calls and I am happy that this video is out
@seanallen
@seanallen 10 місяців тому
Happy to help with this transition.
@saintazur
@saintazur 11 місяців тому
Best tutorial ever for Networking and API calls in Swift UI!
@SB-jq4jc
@SB-jq4jc 7 місяців тому
You explained this so well! Thank you for this!
@seanallen
@seanallen 6 місяців тому
Glad it was helpful!
@tharindudarshana6480
@tharindudarshana6480 10 місяців тому
Thank you ! I'm learning swift as an experienced Spring/Java developer and your tutorials help me to grab the fundaments of Swift with actual functionality which is interesting to follow. Simply great & please keep up posting
@seanallen
@seanallen 10 місяців тому
Glad you like them!
@ml-tech
@ml-tech 9 місяців тому
I’m on the same boat as you! Spring -> Swift. Really digging everything about Swift development so far, I only wish I had jumped into this sooner!
@ash_9651
@ash_9651 9 місяців тому
sean thank you soooo much, this cleared up a lot for me. i love how you progessivly recap the code it really helps me understand!
@seanallen
@seanallen 9 місяців тому
Glad it helped!
@WestCoastAce27
@WestCoastAce27 11 місяців тому
Great job. So much easier than the Obj-C. If you haven’t, since you brought it up, you might do a pros/cons video on multiple files. I’m sure there are going to be many opinions on ‘how big is too big’ for 1 file.
@samr.4692
@samr.4692 10 місяців тому
Great video. Covered multiple subtle but important topics. Thank you.
@seanallen
@seanallen 10 місяців тому
Glad it was helpful!
@ouadiae2706
@ouadiae2706 11 місяців тому
i was looking for something like this for ages, thank you
@seanallen
@seanallen 11 місяців тому
Happy to help!
@cheeesecake6989
@cheeesecake6989 8 місяців тому
Thanks so much. It is true - for a beginner having all the code in one place makes it easier to understand.
@Hgvpuncher
@Hgvpuncher 2 місяці тому
yeah i have watched 20+ videos about this topic and yet this is the only video that worked for me. Thanks bud
@seanallen
@seanallen 2 місяці тому
I was the same way when I tried learning network calls. It's a tough topic. Happy to hear my video resonated with ya!
@thanasisathanasi4965
@thanasisathanasi4965 4 місяці тому
I am mostly a web developer using Javascript, PHP, MySQL and Apache server and I developed my own framework using these tools. I have decided to expand my framework to handshake with Swift and Kotlin ecosystems so I can develop apps that communicate with my other framwork! This video was my starting point. !! Thanks
@rmessentials4048
@rmessentials4048 3 місяці тому
This is a nice and inspiring tutorial. Thanks for the video SeanAllen I will definitely watch it again.
@seanallen
@seanallen 3 місяці тому
Glad it was helpful!
@patgoo2
@patgoo2 7 місяців тому
Very good training video and an important training video to watch. I like how you demonstrate network calls and syncing the API data, coding the JSON, and creating a starter page all on one Xcode file. This makes it much easier to follow.
@seanallen
@seanallen 7 місяців тому
Glad it was helpful, Pat!
@MassonLifestyle
@MassonLifestyle 2 місяці тому
Great video. I suspect I will be saving this and watching it a couple of times. Thanks!
@seanallen
@seanallen 2 місяці тому
Glad it was helpful!
@manwithllama
@manwithllama 10 місяців тому
9:45 Sean! I love that you talk about being confused [as a beginner] by things being all over the place in different directories/files. That happens for me too. This type of "compassion" is rare. So many teachers just assume, and don't have the ability-or don't care to-reach back into the past and remember what it was like to start out. Keep doing this. It sets you apart as a teacher. A professional writer friend of mine-who used to have an excellent podcast-said this all the time: "You're not alone." He peppered it in his writing. And often started articles that way. It was his go-to. Why is this so important? Because ultimately people feel alone. [Most won't admit it.] We want to belong. To know *you* struggled at one point just like I am today? That makes me included. Like i'm not just some idiot that will never get this. It's empowering: "I got this." Thanks again. Love learning from you (and @twostraws).
@SHOLINGER
@SHOLINGER 2 місяці тому
bro your twitter handle ? and that comment was very nice of you !
@davidcbeaudoin
@davidcbeaudoin 11 місяців тому
I've been doing Apps with network requests for a while, but I haven't messed around with using async await yet. This lesson will be really useful for trying to apply it in a new App I'm building. Thank you for a clear explanation as always!
@seanallen
@seanallen 11 місяців тому
Glad you liked it, David!
@mranjithamranjitha6724
@mranjithamranjitha6724 4 місяці тому
Ur notes&teaching is very clearly... thank u
@KalDillard
@KalDillard 8 місяців тому
Thank you! I started out learning iOS until I went to Flutter! I’m looking to learn more Native iOS and you made this easy for me. This is pretty similar to making network calls in Flutter.
@FranciscoHernandez-ij3kd
@FranciscoHernandez-ij3kd 3 місяці тому
Thank you Sean, I appreciate your work.
@seanallen
@seanallen 2 місяці тому
My pleasure!
@HusamSokagi
@HusamSokagi 11 місяців тому
Thank you so much. I didn't know that we can also use async await keywords on Swift and on networking. I was doing my all networking codes with dataTask. It gave me a new perspective. Also It's nice to see Paul here too.
@seanallen
@seanallen 11 місяців тому
Happy to show you something new!
@dineshdas9983
@dineshdas9983 11 місяців тому
What a video🤩 , Im very much happy to watch this video, 25 minutes goes like a minute great tutor i ever had
@seanallen
@seanallen 11 місяців тому
Glad you enjoyed it!
@kal5211
@kal5211 9 місяців тому
Excellent tutorial! Thanks Sean.
@seanallen
@seanallen 9 місяців тому
Glad it was helpful!
@user-wk8tq8qc1p
@user-wk8tq8qc1p 3 місяці тому
Nice! Very detailed explanation. I am a seasoned software engineer just getting my hands dirty with Swift, and all of these concepts make a lot of sense to me. Thanks.
@seanallen
@seanallen 3 місяці тому
Glad it was helpful!
@hustlerking4295
@hustlerking4295 10 місяців тому
Thank you! Thank you! Thank you! Very helpful video! Much wanted!
@user-uy8rw4yw1t
@user-uy8rw4yw1t 10 місяців тому
It's the best video about network calls !!!
@seanallen
@seanallen 10 місяців тому
Glad you liked it!
@jkeee
@jkeee 9 місяців тому
Thank you man, you are the bestest
@ericka.montanez6821
@ericka.montanez6821 4 місяці тому
Fantastic explanation.
@absar66
@absar66 10 місяців тому
Great refresher..Thanks Allen
@seanallen
@seanallen 10 місяців тому
Happy to help.
@taylorenglish6237
@taylorenglish6237 Місяць тому
Thank you for the clear video!!
@seanallen
@seanallen Місяць тому
Happy to help!
@sebasyanni1258
@sebasyanni1258 Місяць тому
Im taking the course of angela, basics of swift. And i look up for your videos to have a certain idea of what im going to see so im not fully lost haha. Thanks for sharing your knowledge
@seanallen
@seanallen Місяць тому
Happy to help!
@ivanmatkovic
@ivanmatkovic 11 місяців тому
Excellent content. Truth be told, I'm not a huge fan of excessive do { } catch blocks as they tend to make me anxious for some reason 😅. I usually lean towards using closures or creating wrappers around do/catch, maybe it's just a force of habit. However, each new release of Swift & SwiftUI seems to be improving tremendously. I'm optimistic that they'll soon address the navigation issues - I'm aware of NavigationStack, but sadly it's only compatible with iOS16+ and I haven't had the chance to try it out yet. A minor suggestion for this kind of videos would be to include a gist with a code in the description.
@filipecanzi
@filipecanzi 10 місяців тому
Thanks Sean!!
@umairnazim3565
@umairnazim3565 2 місяці тому
Amazing explanation
@seanallen
@seanallen 2 місяці тому
Glad you liked it
@crackedpistachio6001
@crackedpistachio6001 5 місяців тому
You are a legend man
@seanallen
@seanallen 5 місяців тому
Haha, happy to help :)
@thomasfrank8379
@thomasfrank8379 8 місяців тому
Do you know how to get the redirect url when getting status code 301? I need to add query items to the new url. Thanks :)
@user-qi8pw4bv4u
@user-qi8pw4bv4u 10 місяців тому
Hello from Ukraine. Nice stuff! Thanks a lot for sharing your knowledge and wisdom! Keep it going! You are great!
@seanallen
@seanallen 10 місяців тому
Glad you enjoyed it!
@Bobin13
@Bobin13 5 місяців тому
OG video, Thanks for the help.
@seanallen
@seanallen 5 місяців тому
No problem!
@LazarofShalev
@LazarofShalev 10 місяців тому
thank you sean!
@bosch5053
@bosch5053 10 місяців тому
Helpful!
@bklyntrev6774
@bklyntrev6774 11 місяців тому
My guy 💪🏿
@muhammednadeemma3553
@muhammednadeemma3553 7 місяців тому
Hi Sean, Out of subject can we create an xcframework with third-party dependencies like Alamofire, lottie-ios etc..
@AbdeliOS
@AbdeliOS 11 місяців тому
This is a gold one!
@seanallen
@seanallen 11 місяців тому
Glad you enjoyed it, Abdel!
@mr.sergio8773
@mr.sergio8773 11 місяців тому
Thank you for the video. I would like to know more about Network Calls. How to work with an array of users?
@ssaai
@ssaai 7 місяців тому
please make video about access and refresh token, Where to save in the iOS, how to call the api
@AvantjerTube
@AvantjerTube 11 місяців тому
Thanks, Sean 🙏
@seanallen
@seanallen 11 місяців тому
No problem, Jerry.
@alinusari2033
@alinusari2033 17 днів тому
Thanks so much. It worked, but How can I edited for an array json data?
@cylenunemaker2444
@cylenunemaker2444 4 дні тому
fantastic video
@seanallen
@seanallen 2 дні тому
Thank you! 😃
@MegaOlzo
@MegaOlzo 9 місяців тому
Thank you!
@seanallen
@seanallen 9 місяців тому
You bet!
@user-uo9nx4tz8u
@user-uo9nx4tz8u 11 місяців тому
The best of the best .....:)
@seanallen
@seanallen 11 місяців тому
Thanks for the kind words :)
@Moch117
@Moch117 Місяць тому
Hey Sean, where do you make the API calls ? It seems like a lot of tutorials online show it in the view model but others say to make the call in the Model layer.. This is for MVVM architecture
@viniciushenriquepellegrini3534
@viniciushenriquepellegrini3534 5 місяців тому
thank you !
@seanallen
@seanallen 5 місяців тому
You're welcome!
@JRHague
@JRHague 11 місяців тому
I would like to see how people typically handle tests with network calls. Would there be test to see if the api your calling has changed and would you make a dummy service that mimics the api for your own tests?
@edwardhasted3849
@edwardhasted3849 10 місяців тому
Many thanks for tackling the real world example that is the most likely bottle neck for Async Await in a workable entirety.
@seanallen
@seanallen 10 місяців тому
Happy to help!
@CostyaT
@CostyaT 11 місяців тому
My first time watching your videos with 29 comments. Thanks for new video 😅.
@seanallen
@seanallen 11 місяців тому
Thanks for watching :)
@NathanBudd
@NathanBudd 4 місяці тому
This is a very well explained video. Do you have one that includes auth and how to save tokens using SwiftUI? Either in a video, or one of your courses?
@seanallen
@seanallen 4 місяці тому
Thanks. Glad you liked it! I don't have a video or course that covers saving tokens, unfortunately.
@andreim7808
@andreim7808 10 місяців тому
Hi Sean! What are your thoughts on iOS development vs QA automation? Any ideas what the future holds for iOS developers for 2024 job market is US considering all the recent massive layoffs in the big tech? Trying to make a decision here, as I think QA market is over saturated at this point... Thanks!
@alexsalinas2733
@alexsalinas2733 4 місяці тому
Amazing content, was able to follow along and replicate the code. Would greatly appreciate it if there is a follow up video regarding oauth API calls to fetch and refresh access token, thanks again for the great content.
@omerklbkr
@omerklbkr 10 місяців тому
I was waiting for the second API call with Array json. Do u gonna make it ?
@fattoofittoo7907
@fattoofittoo7907 7 місяців тому
how to fix "Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type" i create exactly like video but got this one error, already google it cant really found the solution.
@nexj4904
@nexj4904 3 місяці тому
What is the best way to handle null responses from the server? my bio was null and it failed to parse the data.
@4bctrujillog1112
@4bctrujillog1112 11 місяців тому
Hi! I really like your videos! You are my iOS university so thanks. Could you make a video about the same thing but using Alamofire? Thank you.
@seanallen
@seanallen 11 місяців тому
Glad you like my content! I haven't used Alamofire since 2016. Unfortunately, I'm not familiar with it anymore.
@4bctrujillog1112
@4bctrujillog1112 11 місяців тому
@@seanallen don’t worry Sean! Thank you so much for responding to me. Never stop please, I’m from Spain but you are literally the best teacher.
@user-si4bh4dl4r
@user-si4bh4dl4r 2 місяці тому
cool video)
@seanallen
@seanallen 2 місяці тому
Glad you liked it!
@BeyzilMusics
@BeyzilMusics 7 місяців тому
My brain hurts, thanks for the video!
@seanallen
@seanallen 7 місяців тому
You're welcome
@Olden2610
@Olden2610 11 місяців тому
Hey Sean, great video as always! As an experienced developer wanna ask you - do you think it's okay to use classic Result in closure way of network request instead of async/await in new UIKit based apps? I tried to use async/aways and it didn't feel much better, still need to wrap this code in Task, call it with and expect response asynchronously. What do you think? Due to i currently making new app from scratch, and still feeling unease cause i use UIKit :D And not using async/await is making me feel like those ObjC devs i was looking at when i started iOS 5 years ago
@seanallen
@seanallen 11 місяців тому
My opinion is that it's perfectly fine to use the classic closure based way of doing network calls. Async/Await has its benefits and is more "modern". But at the end of the day... as long as your code works and the codebase is easy to read and work in.. you're all good as far as I'm concerned.
@airysm
@airysm 10 місяців тому
Could async await be used with uikit too?
@victorriurean
@victorriurean 11 місяців тому
🔥
@killua3939
@killua3939 11 місяців тому
Been unemployed for 2 months and been actively looking for Swift / React native jobs but the demand is so small this year because of the no-to-low code app builders. its really frustrating pursuing ios beyond.
@moku7787
@moku7787 2 місяці тому
hi i want to ask something, i already have APIService, model data and already call API like image, text to UI but i need to call link from API with hyperlink text. like example a text (Read more) clickable but the link from API, how to call it?
@mkb18577
@mkb18577 2 місяці тому
I tried to recreate this exactly as done in the video to test myself. I can only get it to show the placeholders. It won't pull up any user info? Any ideas why?
@ccstreams7706
@ccstreams7706 3 місяці тому
i get so many errors in swift since it works so differantly from other programming languages. what is the best method to debug? for example when a FOREACH accepts arrays and i where to print that 0..
@soheilpakgohar6630
@soheilpakgohar6630 Місяць тому
awesome
@seanallen
@seanallen Місяць тому
Glad it was helpful!
@siva-subramaniam-v
@siva-subramaniam-v 9 місяців тому
BM - 10:53
@mirzausama7458
@mirzausama7458 11 місяців тому
Great sir please make more video on api using uikit
@AvantjerTube
@AvantjerTube 10 місяців тому
FYI... When I tried using my own account url, ending in "avantjer", the app was showing only placeholders for all three fields (but no errors). I discovered that I had no "bio" on GitHub. ("bio": null) Once I added a bio to my GitHub account, everything worked fine. Interesting that I wasn't at least shown my login, and avatar, even though I had no bio. Maybe Codable "silently" failed because "bio" was null?
@AvantjerTube
@AvantjerTube 10 місяців тому
The code can be updated to handle cases in which the user has no bio. Just make "bio" an optional struct GitHubUser: Codable { let login: String let avatarUrl: String let bio: String? }
@DarylMarcano
@DarylMarcano Місяць тому
how can i use this for an array of users?
@hamzahimi1681
@hamzahimi1681 10 місяців тому
is there any difference between doing in swift ui or core swift
@seanallen
@seanallen 10 місяців тому
SwiftUI is a user interface framework. Swift is a programming language.
@vanylaskywalker
@vanylaskywalker 10 місяців тому
How would you persist the downloaded JSON data using SwiftData?
@seanallen
@seanallen 10 місяців тому
I haven't worked with SwiftData yet, but this is a larger topic that would require another video. Can't be answered in a comment.
@danyjamous5986
@danyjamous5986 2 місяці тому
Does someone know why is try not in a docatch block at : 12:09
@vazzhh
@vazzhh 9 місяців тому
its ok. I understand. but i try to use a JSON from Woocommerce. ( products, price, description ) but not working. i dont know whats the problem
@DavidShaw-dc4re
@DavidShaw-dc4re 9 місяців тому
It fails for me and I get invalid data error code., but a return of 1385 bytes My raw data has twostraws's data response, i can read clearly but my code fails EDIT: The problem was my struct GitHubUser had avatar_url rather than avatarUrl
@gjermundification
@gjermundification 11 місяців тому
Maybe I'll start playing with async await now.
@seanallen
@seanallen 11 місяців тому
Let me know what you think!
@shippoboston7974
@shippoboston7974 9 місяців тому
Literally I watch your videos the past week and realized I wasn't subscribed. Shame on me!
@joshuascorca550
@joshuascorca550 8 місяців тому
Hi Sean, Thanks for the video! Question: Why don't you need to wrap this line in a "do catch" ? let (data, response) = try await URLSession.shared.data(from:url)
@rahuljamba5846
@rahuljamba5846 11 місяців тому
Thanks for sharing
@seanallen
@seanallen 11 місяців тому
Happy to help, Rahul.
@thematrix2829
@thematrix2829 7 місяців тому
Good work
@seanallen
@seanallen 7 місяців тому
Thanks!
@TheWealthyIdiots
@TheWealthyIdiots 10 місяців тому
Great video! How would you handle passing request states like “loading” back to the UI? This variable will change a couple of times during the process so you couldn’t just pass it back as a return from your request, so just curious how you would handle it.
@TheWealthyIdiots
@TheWealthyIdiots 10 місяців тому
I guess you could just add it before and after the await call 🤔. That would work I think.
@seanallen
@seanallen 10 місяців тому
Yeah, that's how it's typically handled. I usually use something like an "isLoading" boolean that gets flipped to true right before the API call, and then flipped back to false when the API call returns.
@TheWealthyIdiots
@TheWealthyIdiots 10 місяців тому
@@seanallen I ended up doing this and adding a activity progress view to my button. It came out great! Thank you!
@samha1513
@samha1513 11 місяців тому
What is the difference between the URLSession.shared.data() vs URLSession.shared.dataTask()?
@bijayaadhikari442
@bijayaadhikari442 11 місяців тому
with data(), you will get data and response in tuple or individual if need, whereas with .dataTask you will get data, response and error to be handled and return is task which need to be resume like task.resume().
@seanallen
@seanallen 11 місяців тому
It's also the difference between the old closure based way of doing network calls and using Swift Concurrency and async await.
@samha1513
@samha1513 11 місяців тому
So if you have more complex json and more customization use dataTask() ?
@alextoma402
@alextoma402 7 місяців тому
I was so shook when you just wrote this code out and basically didn't explain any of it: guard let response = response as? HTTPURLResponse, response.statusCode == 200 else { throw GHError.invalidResponse }
@ianfrye8988
@ianfrye8988 6 місяців тому
Me writing a network call in python in 3 lines 🫣
Intro to SwiftData - Model, Container, Fetch, Create, Update & Delete
27:13
Swift Closures Explained
14:23
Sean Allen
Переглядів 56 тис.
Лизка заплакала смотря видео котиков🙀😭
00:33
😱СНЯЛ ФИКСИКОВ НА КАМЕРУ‼️
00:35
OMG DEN
Переглядів 601 тис.
ФОКУС С ЧИПСАМИ (секрет)
00:44
Masomka
Переглядів 2,9 млн
Create A Python API in 12 Minutes
12:05
Tech With Tim
Переглядів 504 тис.
How to determine where code runs in Swift Concurrency
12:42
donny wals
Переглядів 1,5 тис.
Swift Generics for Beginners - Eliminate Code Duplication
10:37
Sean Allen
Переглядів 16 тис.
How I Would Learn to Code in 2024 (if I had to start over)
13:44
Internet Made Coder
Переглядів 47 тис.
Your App Will Get Rejected | New Privacy Rules - 2024
11:26
Sean Allen
Переглядів 26 тис.
Async/await. Что это такое и с чем его едят? iOS Такой
42:31
iOS Такой • IOS Разработка • IT Подкасты
Переглядів 4,1 тис.
I learned to code from scratch in 1 year. Here's how.
41:55
Thomas Frank
Переглядів 289 тис.
Какой MacBook выбрать в 2024 - М1, М2 или М3?
24:56
Какой MacBook выбрать в 2024 - М1, М2 или М3?
24:56
Power AC Coolness with Anker SOLIX F3800
0:27
Anker SOLIX
Переглядів 3,4 млн
I had no idea SHEIN sold PC parts…
27:10
Linus Tech Tips
Переглядів 1,4 млн
У Nokia 3310 появился конкурент
0:36
AndroHack
Переглядів 1,8 млн