[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6702":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":16,"starSnapshotCount":16,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},6702,"30DaysofSwift","allenwong\u002F30DaysofSwift","allenwong","A self-taught project to learn Swift.","",null,"Swift",11492,2004,557,7,0,4,67.31,false,"master",true,[],"2026-06-12 04:00:30","# 30 Days of Swift\n\n![Alt text](https:\u002F\u002Fraw.githubusercontent.com\u002Fallenwong\u002F30DaysofSwift\u002Fmaster\u002Fgithub%20cover.png)\n\n[![Twitter URL](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Furl\u002Fhttp\u002Fshields.io.svg?style=social)](https:\u002F\u002Ftwitter.com\u002Fintent\u002Ftweet?text=https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift)\n[![Twitter Follow](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Fcreativewang.svg?style=social)](https:\u002F\u002Ftwitter.com\u002Fcreativewang)\n\n## Hi Community ##\n\nI am Allen Wang, a [product designer](https:\u002F\u002Fdribbble.com\u002Fopenallen) and currently learning Swift.\n\nThis project was totally inspired by [Sam Lu](https:\u002F\u002Ftwitter.com\u002Fsamvlu)'s [100 Days of Swift](http:\u002F\u002Fsamvlu.com\u002Findex.html) project, after read his [Medium post](https:\u002F\u002Fmedium.com\u002F@samvlu\u002F100-days-of-swift-736d45a19b63#.ayz5vx6mc) I made a decision to put my every single day to write Swift, this's the final code of 30 tiny Swift projects.\n\n## Thank You to My Sponsor ##\n30 Dasy of Swift is being sponsored by the following tool, please help to support me by taking a look and signing up to a free trial.\n\n[![Gitads](https:\u002F\u002Fimages.gitads.io\u002F30DaysofSwift)](https:\u002F\u002Ftracking.gitads.io\u002F?repo=30DaysofSwift)\n\n\n## Project Index & GIF Showcase ##\n\nProject 01 - [SimpleStopWatch](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2001%20-%20SimpleStopWatch)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2001%20-%20SimpleStopWatch\u002FSimple%20Stop%20Watch.gif?raw=true)\n\nProject 02 - [CustomFont](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2002%20-%20CustomFont)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2002%20-%20CustomFont\u002FCustomfont.gif?raw=true)\n\nProject 03 - [PlayLocalVideo](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2003%20-%20PlayLocalVideo)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2003%20-%20PlayLocalVideo\u002Fplayvideo.gif?raw=true)\n\nProject 04 - [SnapChatMenu](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2004%20-%20SnapChatMenu)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2004%20-%20SnapChatMenu\u002Fsnapchatmenu.gif?raw=true)\n\nProject 05 - [CarouselEffect](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2005%20-%20CarouselEffect)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2005%20-%20CarouselEffect\u002FCarousel.gif?raw=true)\n\nProject 06 - [FindMyLocation](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2006%20-%20FindMyLocation)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2006%20-%20FindMyLocation\u002Fmylocation.gif?raw=true)\n\nProject 07 - [PullToRefresh](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2007%20-%20PullToRefresh)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2007%20-%20PullToRefresh\u002Fpulltorefresh.gif?raw=true)\n\nProject 08 - [RandomGradientColorMusic](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2008%20-%20RandomGradientColorMusic)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2008%20-%20RandomGradientColorMusic\u002FrandomMusicColor.gif?raw=true)\n\nProject 09 - [ImageScroller](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2009%20-ImageScroller)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2009%20-ImageScroller\u002Fimage%20Scroller%20Effect.gif?raw=true)\n\nProject 10 - [VideoBackground](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2010%20-%20VideoBackground)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2010%20-%20VideoBackground\u002Fvideobg.gif?raw=true)\n\nProject 11 - [ClearTableViewCell](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2011%20-%20ClearTableViewCell)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2011%20-%20ClearTableViewCell\u002Fcleartableviewcell.gif?raw=true)\n\nProject 12 - [LoginAnimation](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2012%20-%20LoginAnimation)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2012%20-%20LoginAnimation\u002Fsimple%20login%20animation.gif?raw=true)\n\nProject 13 - [AnimateTableViewCell](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2013%20-%20AnimateTableViewCell)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2013%20-%20AnimateTableViewCell\u002FAnimateTabel.gif?raw=true)\n\nProject 14 - [EmojiSlotMachine](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2014%20-%20EmojiSlotMachine)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2014%20-%20EmojiSlotMachine\u002Femoji%20spin.gif?raw=true)\n\nProject 15 - [AnimatedSplash](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2015%20-%20%20AnimatedSplash)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2015%20-%20%20AnimatedSplash\u002Fsplash.gif?raw=true)\n\nProject 16 - [SlideMenu](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2016%20-%20SlideMenu)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2016%20-%20SlideMenu\u002FSlideMenu.gif?raw=true)\n\nProject 17 - [TumblrMenu](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2017%20-%20TumblrMenu)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2017%20-%20TumblrMenu\u002FTumblrMenu.gif?raw=true)\n\nProject 18 - [LimitCharacters](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2018%20-%20LimitCharacters)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2018%20-%20LimitCharacters\u002FLimit.gif?raw=true)\n\nProject 19 - [CustomPullToRefresh](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2019%20-%20CustomPullToRefresh)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2019%20-%20CustomPullToRefresh\u002FCustomPullToRefresh.gif?raw=true)\n\nProject 20 - [CollectionViewAnimation](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2020%20-%20CollectionViewAnimation)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2020%20-%20CollectionViewAnimation\u002FCollectionViewAnimation.gif?raw=true)\n\nProject 21 - [SwipeableCell](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2021%20-%20SwipeableCell)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2021%20-%20SwipeableCell\u002FSwipeable%20Cell.gif?raw=true)\n\nProject 22 - [3DTouchQuickAction](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2022%20-%203DTouchQuickAction)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2022%20-%203DTouchQuickAction\u002F3DTouchQuickAction.gif?raw=true)\n\nProject 23 - [SlideOutMenu](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2023%20-%20SlideOutMenu)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2023%20-%20SlideOutMenu\u002FSlideOutMenu.gif?raw=true)\n\nProject 24 - [MosaicLayout](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2024%20-%20MosaicLayout)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2024%20-%20MosaicLayout\u002FMosaicLayouts.gif?raw=true)\n\nProject 25 - [UIViewBasicAnimation](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2025%20-%20UIViewBasicAnimation)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2025%20-%20UIViewBasicAnimation\u002FBasicAnimation.gif?raw=true)\n\nProject 26 - [CoreDataApp](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2026%20-%20CoreDataApp)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2026%20-%20CoreDataApp\u002FCoreData.gif?raw=true)\n\nProject 27 - [TabbarApp](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2027%20-%20TabbarApp)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2027%20-%20TabbarApp\u002FTapBarAnimation.gif?raw=true)\n\nProject 28 - [SpotlightSearch](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2028%20-%20SpotlightSearch)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2028%20-%20SpotlightSearch\u002FSpotlight%20Search.gif?raw=true)\n\nProject 29 - [iMessageImagePicker](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2029%20-%20iMessageImagePicker)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2029%20-%20iMessageImagePicker\u002FAvatarPicker.gif?raw=true)\n\nProject 30 - [WikiFace](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Ftree\u002Fmaster\u002FProject%2030%20-%20WikiFace)\n\n![Alt text](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift\u002Fblob\u002Fmaster\u002FProject%2030%20-%20WikiFace\u002FwikiFace.gif?raw=true)\n\n## Where I learn from? ##\n\n[Design + Code](https:\u002F\u002Fdesigncode.io\u002F)\n现在可以通过[Price Tag 正版数字商店](https:\u002F\u002Fj.youzan.com\u002FNYpjGY)购买 Design Code 2.0 一年订阅仅需 256 元，2018 年 7 月份将首次更新中文版本。\n\n[AppCoda](http:\u002F\u002Fwww.appcoda.com\u002F)\n\n[iOSCreator](http:\u002F\u002Fwww.ioscreator.com\u002F)\n\n[DevelopersAcademy](http:\u002F\u002Fdevelopersacademy.io\u002Fblog\u002F)\n\n[HackingWithSwift](https:\u002F\u002Fwww.hackingwithswift.com\u002F)\n\n[GrokSwift](https:\u002F\u002Fgrokswift.com\u002F)\n\n[iOS With Girlfriend - Kevinzhow](http:\u002F\u002Fspace.bilibili.com\u002F3517995\u002F#!\u002Findex)\n\n[Youtube - Jared Davidson](https:\u002F\u002Fwww.youtube.com\u002Fuser\u002FArchetapp)\n\n[Youtube - Geeky Lemon](https:\u002F\u002Fwww.youtube.com\u002Fuser\u002FGeekyLemon)\n\n[Youtube - Brian Advent](https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCysEngjfeIYapEER9K8aikw)\n\n[Youtube - CodeWithChris](https:\u002F\u002Fwww.youtube.com\u002Fuser\u002FCodeWithChris)\n\n## License ##\n\n[30 Days of Swift](https:\u002F\u002Fgithub.com\u002Fallenwong\u002F30DaysofSwift) is under the MIT license.\n\n## Reach me ##\n\nTwitter: [@creativewang](https:\u002F\u002Ftwitter.com\u002Fcreativewang)\n\nDribbble: [Allen Wang](https:\u002F\u002Fdribbble.com\u002Fopenallen)\n\nWeibo: [@Allen朝辉](http:\u002F\u002Fweibo.com\u002Fwangchaohui)\n","30DaysofSwift 是一个自学项目，旨在帮助开发者通过实践学习 Swift 编程语言。该项目包含 30 个小型的 Swift 项目，每个项目都展示了不同的功能和技术特点，如自定义字体、播放本地视频、实现类似 Snapchat 的菜单效果等。这些小项目不仅有助于初学者掌握 Swift 的基本语法和开发技巧，还能让有一定基础的开发者进一步提升自己的技能。适用于希望快速入门或提高 Swift 开发能力的学习者以及对 iOS 应用开发感兴趣的个人。",2,"2026-06-11 03:08:25","top_language"]