├── .gitignore ├── 01View ├── 01View.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── 01View │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ └── no_avatar.imageset │ │ ├── Blank-avatar.png │ │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── SceneDelegate.swift │ └── ViewController.swift ├── 02CustomView ├── 02CustomView.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── 02CustomView │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── Base.lproj │ │ └── Main.storyboard │ └── ViewController.swift │ ├── Info.plist │ ├── Resources │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── hamster.imageset │ │ │ ├── Contents.json │ │ │ └── hamter.jpeg │ │ ├── husky.imageset │ │ │ ├── Contents.json │ │ │ └── husky.png │ │ └── no_avatar.imageset │ │ │ ├── Blank-avatar.png │ │ │ └── Contents.json │ └── Base.lproj │ │ └── LaunchScreen.storyboard │ └── Views │ ├── MyView.swift │ ├── UserView.swift │ └── UserView.xib ├── 03TouchEvent ├── 02TouchEvent.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── 02TouchEvent │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ └── ball.imageset │ │ ├── Contents.json │ │ └── ball.png │ ├── BalllViewController.swift │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── LineViewController.swift │ ├── SceneDelegate.swift │ └── ViewController.swift ├── 04Drawing ├── 04Drawing.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── 04Drawing │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── Base.lproj │ │ └── Main.storyboard │ └── ViewController.swift │ ├── Info.plist │ ├── Resources │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ └── Base.lproj │ │ └── LaunchScreen.storyboard │ └── Views │ ├── FxLineView.swift │ └── FxRectangularView.swift ├── 05AutoLayout ├── 05AutoLayout.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── 05AutoLayout │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ └── fx-studio-logo.imageset │ │ ├── Contents.json │ │ └── fx-studio-logo.png │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── SceneDelegate.swift │ └── ViewController.swift ├── 06StackView ├── 06StackView.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── 06StackView │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── fx-studio-logo.imageset │ │ ├── Contents.json │ │ └── fx-studio-logo.png │ ├── swift-logo.imageset │ │ ├── Contents.json │ │ └── swift-icon-1.png │ └── swiftui-logo.imageset │ │ ├── Contents.json │ │ └── swiftui-icon-1.png │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── SceneDelegate.swift │ └── ViewController.swift ├── 07Protocol └── 07Protocol.playground │ ├── Contents.swift │ └── contents.xcplayground ├── 08Delegation ├── DelegateDemo │ ├── DelegateDemo.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ ├── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcuserdata │ │ │ │ └── lephuongtien.xcuserdatad │ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ └── DelegateDemo │ │ ├── AppDelegate │ │ ├── AppDelegate.swift │ │ └── SceneDelegate.swift │ │ ├── Controllers │ │ ├── Base.lproj │ │ │ └── Main.storyboard │ │ ├── DetailViewController │ │ │ └── DetailViewController.swift │ │ └── HomeViewController │ │ │ └── HomeViewController.swift │ │ ├── Info.plist │ │ ├── Resources │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── no_avatar.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── no-avatar-png.png │ │ └── Base.lproj │ │ │ └── LaunchScreen.storyboard │ │ └── Views │ │ └── UserView │ │ ├── UserView.swift │ │ └── UserView.xib └── DelegationSample.playground │ ├── Contents.swift │ └── contents.xcplayground ├── 09ViewController ├── 09ViewController.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── 09ViewController │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── Home │ │ └── HomeViewController.swift │ ├── Storyboard │ │ └── Base.lproj │ │ │ └── Main.storyboard │ └── ViewController.swift │ ├── Info.plist │ └── Resources │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ └── Base.lproj │ └── LaunchScreen.storyboard ├── 10GCD └── DemoGCD.playground │ ├── Contents.swift │ ├── contents.xcplayground │ └── playground.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ └── lephuongtien.xcuserdatad │ └── UserInterfaceState.xcuserstate ├── 11Navigation └── DemoNavigation │ ├── DemoNavigation.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist │ └── DemoNavigation │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── FirstVC │ │ ├── FirstViewController.swift │ │ └── FirstViewController.xib │ ├── SecondVC │ │ ├── SecondViewController.swift │ │ └── SecondViewController.xib │ └── ThirdVC │ │ ├── ThirdViewController.swift │ │ └── ThirdViewController.xib │ ├── Info.plist │ └── Resources │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ └── setting-icon.imageset │ │ ├── Contents.json │ │ └── icons8-settings-48.png │ └── Base.lproj │ └── LaunchScreen.storyboard ├── 12Singleton └── SingletonDemo.playground │ ├── Contents.swift │ └── contents.xcplayground ├── 13MVC ├── MVC.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── MVC │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── HomeViewController.swift │ └── HomeViewController.xib │ ├── Info.plist │ ├── Models │ └── Calculator.swift │ └── Resources │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ └── Base.lproj │ └── LaunchScreen.storyboard ├── 14TableView ├── DemoTableView │ ├── DemoTableView.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ ├── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcuserdata │ │ │ │ └── lephuongtien.xcuserdatad │ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ └── DemoTableView │ │ ├── AppDelegate │ │ ├── AppDelegate.swift │ │ └── SceneDelegate.swift │ │ ├── Controllers │ │ ├── Detail │ │ │ ├── DetailViewController.swift │ │ │ └── DetailViewController.xib │ │ └── Home │ │ │ ├── Cell │ │ │ ├── HomeCell.swift │ │ │ └── HomeCell.xib │ │ │ ├── HomeViewController.swift │ │ │ └── HomeViewController.xib │ │ ├── Info.plist │ │ ├── Models │ │ └── User.swift │ │ └── Resources │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── no-avatar.imageset │ │ │ ├── Contents.json │ │ │ └── no-avatar.png │ │ └── Base.lproj │ │ └── LaunchScreen.storyboard ├── ListContentView │ ├── ListContentView.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── ListContentView │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Book.swift │ │ ├── Info.plist │ │ ├── SceneDelegate.swift │ │ └── ViewController.swift ├── RowActions │ ├── RowActions.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── RowActions │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── SceneDelegate.swift │ │ └── ViewController.swift └── TableViewInTableView │ ├── TableViewInTableView.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── TableViewInTableView │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Controllers │ ├── Cells │ │ ├── HomeCell.swift │ │ ├── HomeCell.xib │ │ ├── HomeSubCell.swift │ │ └── HomeSubCell.xib │ └── ViewController.swift │ ├── Info.plist │ └── Models │ └── Homeitem.swift ├── 15CollectionView ├── DemoCollectionView │ ├── DemoCollectionView.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ ├── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcuserdata │ │ │ │ └── lephuongtien.xcuserdatad │ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ └── DemoCollectionView │ │ ├── AppDelegate │ │ ├── AppDelegate.swift │ │ └── SceneDelegate.swift │ │ ├── Controllers │ │ └── Home │ │ │ ├── Cell │ │ │ ├── HomeCell.swift │ │ │ └── HomeCell.xib │ │ │ ├── Header │ │ │ ├── HomeHeaderView.swift │ │ │ └── HomeHeaderView.xib │ │ │ ├── HomeViewController.swift │ │ │ └── HomeViewController.xib │ │ ├── Info.plist │ │ ├── Models │ │ └── User.swift │ │ └── Resources │ │ ├── Assets.xcassets │ │ ├── 0.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-female-user-100-2.png │ │ ├── 1.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-female-user-101.png │ │ ├── 2.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-female-user-100.png │ │ ├── 3.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-male-user-101.png │ │ ├── 4.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-male-user-100.png │ │ ├── 5.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-user-100 (1).png │ │ ├── 6.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-user-100.png │ │ ├── 7.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-user-male-100.png │ │ ├── 8.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-user-male-101.png │ │ ├── 9.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-male-user-100.png │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ └── Base.lproj │ │ └── LaunchScreen.storyboard └── DiffableDataSource │ ├── DiffableDataSource.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── DiffableDataSource │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── Controllers │ └── Home │ │ ├── Cell │ │ ├── HomeCell.swift │ │ └── HomeCell.xib │ │ ├── Header │ │ ├── HomeHeaderView.swift │ │ └── HomeHeaderView.xib │ │ ├── HomeViewController.swift │ │ └── HomeViewController.xib │ ├── Info.plist │ ├── Models │ ├── Flower.swift │ └── User.swift │ └── Resources │ └── Assets.xcassets │ ├── AppIcon.appiconset │ └── Contents.json │ ├── Contents.json │ └── Flowers │ ├── Contents.json │ ├── flower1.imageset │ ├── Contents.json │ └── flower1.jpg │ ├── flower10.imageset │ ├── Contents.json │ └── flower10.jpeg │ ├── flower2.imageset │ ├── Contents.json │ └── flower2.jpeg │ ├── flower3.imageset │ ├── Contents.json │ └── flower3.jpg │ ├── flower4.imageset │ ├── Contents.json │ └── flower4.jpeg │ ├── flower5.imageset │ ├── Contents.json │ └── flower5.jpg │ ├── flower6.imageset │ ├── Contents.json │ └── flower6.jpg │ ├── flower7.imageset │ ├── Contents.json │ └── flower7.jpg │ ├── flower8.imageset │ ├── Contents.json │ └── flower8.jpeg │ └── flower9.imageset │ ├── Contents.json │ └── flower9.jpeg ├── 16TabbarController └── DemoTabbarController │ ├── DemoTabbarController.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist │ └── DemoTabbarController │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── FriendsVC │ │ ├── FriendsViewController.swift │ │ └── FriendsViewController.xib │ ├── HomeVC │ │ ├── HomeViewController.swift │ │ └── HomeViewController.xib │ ├── MessagesVC │ │ ├── MessagesViewController.swift │ │ └── MessagesViewController.xib │ └── ProfileVC │ │ ├── ProfileViewController.swift │ │ └── ProfileViewController.xib │ ├── Info.plist │ └── Resources │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── ic-tabbar-friends.imageset │ │ ├── Contents.json │ │ └── icons8-user-groups-60.png │ ├── ic-tabbar-messages-selected.imageset │ │ ├── Contents.json │ │ └── icons8-chat-96.png │ ├── ic-tabbar-messages.imageset │ │ ├── Contents.json │ │ └── icons8-chat-96 (1).png │ ├── ic-tabbar-profile.imageset │ │ ├── Contents.json │ │ └── icons8-user-60.png │ └── tabbar-bg.imageset │ │ ├── 1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg │ │ └── Contents.json │ └── Base.lproj │ └── LaunchScreen.storyboard ├── 17MVVM ├── DemoMVVM.zip └── DemoMVVM │ ├── DemoTabbarController.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ └── xcschememanagement.plist │ └── DemoTabbarController │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── Base │ │ ├── BaseNavigationController.swift │ │ ├── BaseTabBarController.swift │ │ └── BaseViewController.swift │ ├── ForgotPasswordVC │ │ ├── ForgotPasswordViewController.swift │ │ └── ForgotPasswordViewController.xib │ ├── FriendsVC │ │ ├── FriendsViewController.swift │ │ └── FriendsViewController.xib │ ├── HomeVC │ │ ├── Cells │ │ │ ├── HomeCell.swift │ │ │ └── HomeCell.xib │ │ ├── HomeViewController.swift │ │ ├── HomeViewController.xib │ │ └── HomeViewModel.swift │ ├── LoginVC │ │ ├── LoginViewController.swift │ │ ├── LoginViewController.xib │ │ └── LoginViewModel.swift │ ├── MessagesVC │ │ ├── MessagesViewController.swift │ │ └── MessagesViewController.xib │ ├── ProfileVC │ │ ├── ProfileViewController.swift │ │ └── ProfileViewController.xib │ └── RegisterVC │ │ ├── RegisterViewController.swift │ │ ├── RegisterViewController.xib │ │ └── RegisterViewModel.swift │ ├── Info.plist │ ├── Models │ ├── APIManager │ │ └── Core │ │ │ ├── API.Manager.swift │ │ │ ├── API.Request.swift │ │ │ └── API.swift │ ├── DataManager │ │ └── DataManager.swift │ ├── Ext │ │ └── Data.Ext.swift │ ├── Networking │ │ └── Networking.swift │ └── Objects │ │ └── Music.swift │ └── Resources │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── ic-tabbar-friends.imageset │ │ ├── Contents.json │ │ └── icons8-user-groups-60.png │ ├── ic-tabbar-messages-selected.imageset │ │ ├── Contents.json │ │ └── icons8-chat-96.png │ ├── ic-tabbar-messages.imageset │ │ ├── Contents.json │ │ └── icons8-chat-96 (1).png │ ├── ic-tabbar-profile.imageset │ │ ├── Contents.json │ │ └── icons8-user-60.png │ └── tabbar-bg.imageset │ │ ├── 1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg │ │ └── Contents.json │ └── Base.lproj │ └── LaunchScreen.storyboard ├── 18Networking ├── DemoNetworking │ ├── DemoNetworking.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ ├── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcuserdata │ │ │ │ └── lephuongtien.xcuserdatad │ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ ├── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ └── DemoNetworking │ │ ├── AppDelegate │ │ ├── AppDelegate.swift │ │ └── SceneDelegate.swift │ │ ├── Controllers │ │ ├── Base │ │ │ ├── BaseNavigationController.swift │ │ │ ├── BaseTabBarController.swift │ │ │ └── BaseViewController.swift │ │ ├── ForgotPasswordVC │ │ │ ├── ForgotPasswordViewController.swift │ │ │ └── ForgotPasswordViewController.xib │ │ ├── FriendsVC │ │ │ ├── FriendsViewController.swift │ │ │ └── FriendsViewController.xib │ │ ├── HomeVC │ │ │ ├── Cells │ │ │ │ ├── HomeCell.swift │ │ │ │ └── HomeCell.xib │ │ │ ├── HomeViewController.swift │ │ │ ├── HomeViewController.xib │ │ │ └── HomeViewModel.swift │ │ ├── LoginVC │ │ │ ├── LoginViewController.swift │ │ │ ├── LoginViewController.xib │ │ │ └── LoginViewModel.swift │ │ ├── MessagesVC │ │ │ ├── MessagesViewController.swift │ │ │ └── MessagesViewController.xib │ │ ├── ProfileVC │ │ │ ├── ProfileViewController.swift │ │ │ └── ProfileViewController.xib │ │ └── RegisterVC │ │ │ ├── RegisterViewController.swift │ │ │ ├── RegisterViewController.xib │ │ │ └── RegisterViewModel.swift │ │ ├── Info.plist │ │ ├── Models │ │ ├── APIManager │ │ │ ├── API.Music.swift │ │ │ └── Core │ │ │ │ ├── API.Manager.swift │ │ │ │ ├── API.Request.swift │ │ │ │ └── API.swift │ │ ├── DataManager │ │ │ └── DataManager.swift │ │ ├── Ext │ │ │ └── Data.Ext.swift │ │ ├── Networking │ │ │ └── Networking.swift │ │ └── Objects │ │ │ └── Music.swift │ │ └── Resources │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── ic-navi-refresh.imageset │ │ │ ├── Contents.json │ │ │ ├── icons8-refresh-32.png │ │ │ └── icons8-refresh-64.png │ │ ├── ic-tabbar-friends.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-user-groups-60.png │ │ ├── ic-tabbar-messages-selected.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-chat-96.png │ │ ├── ic-tabbar-messages.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-chat-96 (1).png │ │ ├── ic-tabbar-profile.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-user-60.png │ │ └── tabbar-bg.imageset │ │ │ ├── 1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg │ │ │ └── Contents.json │ │ └── Base.lproj │ │ └── LaunchScreen.storyboard └── LoadingImage │ ├── LoadingImage.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── LoadingImage │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── Base.lproj │ │ └── Main.storyboard │ └── ViewController.swift │ ├── Extensions │ └── UIImageView+LoadImage.swift │ ├── Info.plist │ └── Resources │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ └── Base.lproj │ └── LaunchScreen.storyboard ├── 19ProjectTemplate └── ProjectTemplate │ ├── Podfile │ ├── Podfile.lock │ ├── Pods │ ├── Alamofire │ │ ├── LICENSE │ │ ├── README.md │ │ └── Source │ │ │ ├── AFError.swift │ │ │ ├── Alamofire.swift │ │ │ ├── AlamofireExtended.swift │ │ │ ├── CachedResponseHandler.swift │ │ │ ├── DispatchQueue+Alamofire.swift │ │ │ ├── EventMonitor.swift │ │ │ ├── HTTPHeaders.swift │ │ │ ├── HTTPMethod.swift │ │ │ ├── MultipartFormData.swift │ │ │ ├── MultipartUpload.swift │ │ │ ├── NetworkReachabilityManager.swift │ │ │ ├── Notifications.swift │ │ │ ├── OperationQueue+Alamofire.swift │ │ │ ├── ParameterEncoder.swift │ │ │ ├── ParameterEncoding.swift │ │ │ ├── Protector.swift │ │ │ ├── RedirectHandler.swift │ │ │ ├── Request.swift │ │ │ ├── RequestInterceptor.swift │ │ │ ├── RequestTaskMap.swift │ │ │ ├── Response.swift │ │ │ ├── ResponseSerialization.swift │ │ │ ├── Result+Alamofire.swift │ │ │ ├── RetryPolicy.swift │ │ │ ├── ServerTrustEvaluation.swift │ │ │ ├── Session.swift │ │ │ ├── SessionDelegate.swift │ │ │ ├── URLConvertible+URLRequestConvertible.swift │ │ │ ├── URLEncodedFormEncoder.swift │ │ │ ├── URLRequest+Alamofire.swift │ │ │ ├── URLSessionConfiguration+Alamofire.swift │ │ │ └── Validation.swift │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── xcschemes │ │ │ ├── Alamofire.xcscheme │ │ │ ├── Pods-ProjectTemplate.xcscheme │ │ │ └── xcschememanagement.plist │ └── Target Support Files │ │ ├── Alamofire │ │ ├── Alamofire-Info.plist │ │ ├── Alamofire-dummy.m │ │ ├── Alamofire-prefix.pch │ │ ├── Alamofire-umbrella.h │ │ ├── Alamofire.modulemap │ │ └── Alamofire.xcconfig │ │ └── Pods-ProjectTemplate │ │ ├── Pods-ProjectTemplate-Info.plist │ │ ├── Pods-ProjectTemplate-acknowledgements.markdown │ │ ├── Pods-ProjectTemplate-acknowledgements.plist │ │ ├── Pods-ProjectTemplate-dummy.m │ │ ├── Pods-ProjectTemplate-frameworks-Debug-input-files.xcfilelist │ │ ├── Pods-ProjectTemplate-frameworks-Debug-output-files.xcfilelist │ │ ├── Pods-ProjectTemplate-frameworks-Release-input-files.xcfilelist │ │ ├── Pods-ProjectTemplate-frameworks-Release-output-files.xcfilelist │ │ ├── Pods-ProjectTemplate-frameworks.sh │ │ ├── Pods-ProjectTemplate-umbrella.h │ │ ├── Pods-ProjectTemplate.debug.xcconfig │ │ ├── Pods-ProjectTemplate.modulemap │ │ └── Pods-ProjectTemplate.release.xcconfig │ ├── ProjectTemplate.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist │ ├── ProjectTemplate.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ └── ProjectTemplate │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── Base │ │ ├── BaseNavigationController.swift │ │ ├── BaseTabBarController.swift │ │ └── BaseViewController.swift │ ├── FriendsVC │ │ ├── FriendsViewController.swift │ │ └── FriendsViewController.xib │ ├── Home │ │ ├── Cells │ │ │ ├── HomeCell.swift │ │ │ ├── HomeCell.xib │ │ │ └── HomeCellViewModel.swift │ │ ├── HomeViewController.swift │ │ ├── HomeViewController.xib │ │ └── HomeViewModel.swift │ ├── MessagesVC │ │ ├── MessagesViewController.swift │ │ └── MessagesViewController.xib │ └── ProfileVC │ │ ├── ProfileViewController.swift │ │ └── ProfileViewController.xib │ ├── Define │ ├── App.Color.swift │ ├── App.Key.swift │ ├── App.Text.swift │ └── App.swift │ ├── Exts │ ├── Color.Ext.swift │ ├── Data.Ext.swift │ └── String.Ext.swift │ ├── Info.plist │ ├── Models │ ├── API │ │ ├── API.Music.swift │ │ └── Core │ │ │ ├── API.Manager.swift │ │ │ ├── API.Request.swift │ │ │ └── API.swift │ ├── Managers │ │ ├── AudioManager.swift │ │ ├── DataManager.swift │ │ ├── FileManager.swift │ │ └── LocationManager.swift │ └── Objects │ │ ├── Music.swift │ │ └── User.swift │ ├── Resources │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── tabbar │ │ │ ├── Contents.json │ │ │ ├── ic-navi-refresh.imageset │ │ │ ├── Contents.json │ │ │ ├── icons8-refresh-32.png │ │ │ └── icons8-refresh-64.png │ │ │ ├── ic-tabbar-friends.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-user-groups-60.png │ │ │ ├── ic-tabbar-messages-selected.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-chat-96.png │ │ │ ├── ic-tabbar-messages.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-chat-96 (1).png │ │ │ ├── ic-tabbar-profile.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-user-60.png │ │ │ └── tabbar-bg.imageset │ │ │ ├── 1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg │ │ │ └── Contents.json │ └── Base.lproj │ │ └── LaunchScreen.storyboard │ └── Views │ ├── Common │ ├── Button.swift │ └── Label.swift │ └── Custom │ ├── FXSliderView.swift │ ├── FXSliderView.xib │ ├── MyDatePickerView.swift │ └── MyDatePickerView.xib ├── 20CoreData └── DemoCoreData │ ├── DemoCoreData.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── DemoCoreData.xcscheme │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ └── xcschememanagement.plist │ └── DemoCoreData │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── Edit │ │ ├── EditViewController.swift │ │ └── EditViewController.xib │ ├── Home │ │ ├── Cells │ │ │ ├── HomeCell.swift │ │ │ └── HomeCell.xib │ │ ├── HomeViewController.swift │ │ └── HomeViewController.xib │ └── New │ │ ├── NewViewController.swift │ │ └── NewViewController.xib │ ├── Info.plist │ ├── Models │ └── CoreData │ │ ├── DemoCoreData.xcdatamodeld │ │ ├── .xccurrentversion │ │ └── DemoCoreData.xcdatamodel │ │ │ └── contents │ │ ├── User+CoreDataClass.swift │ │ └── User+CoreDataProperties.swift │ └── Resources │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ └── Base.lproj │ └── LaunchScreen.storyboard ├── 21CoreLocation └── DemoCoreLocation │ ├── DemoCoreLocation.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ └── xcschememanagement.plist │ └── DemoCoreLocation │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── Base.lproj │ │ └── Main.storyboard │ └── ViewController.swift │ ├── Info.plist │ ├── LocationManager │ └── LocationManager.swift │ └── Resources │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ └── Base.lproj │ └── LaunchScreen.storyboard ├── 22MapView └── DemoMap │ ├── DemoMap.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── lephuongtien.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── lephuongtien.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ └── xcschememanagement.plist │ └── DemoMap │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── Base.lproj │ │ └── Main.storyboard │ └── ViewController.swift │ ├── Info.plist │ ├── Models │ ├── LocationManager.swift │ └── MyPin.swift │ ├── Resources │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── no_image.imageset │ │ │ ├── Contents.json │ │ │ └── Screen Shot 2019-12-26 at 4.15.19 PM.png │ │ └── pin.imageset │ │ │ ├── Contents.json │ │ │ └── pin.png │ └── Base.lproj │ │ └── LaunchScreen.storyboard │ └── Views │ └── MyPinView.swift ├── 23Realm └── DemoRealm │ ├── Podfile │ ├── Podfile.lock │ ├── ProjectTemplate.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ ├── ProjectTemplate.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── ProjectTemplate │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Controllers │ ├── Base │ │ ├── BaseNavigationController.swift │ │ ├── BaseTabBarController.swift │ │ └── BaseViewController.swift │ ├── DetailVC │ │ ├── DetailViewController.swift │ │ └── DetailViewController.xib │ ├── FriendsVC │ │ ├── FriendsViewController.swift │ │ └── FriendsViewController.xib │ ├── Home │ │ ├── Cells │ │ │ ├── HomeCell.swift │ │ │ ├── HomeCell.xib │ │ │ └── HomeCellViewModel.swift │ │ ├── HomeViewController.swift │ │ ├── HomeViewController.xib │ │ └── HomeViewModel.swift │ ├── MessagesVC │ │ ├── MessagesViewController.swift │ │ └── MessagesViewController.xib │ └── ProfileVC │ │ ├── ProfileViewController.swift │ │ └── ProfileViewController.xib │ ├── Define │ ├── App.Color.swift │ ├── App.Key.swift │ ├── App.Text.swift │ └── App.swift │ ├── Exts │ ├── Color.Ext.swift │ ├── Data.Ext.swift │ └── String.Ext.swift │ ├── Info.plist │ ├── Models │ ├── API │ │ ├── API.Music.swift │ │ └── Core │ │ │ ├── API.Manager.swift │ │ │ ├── API.Request.swift │ │ │ └── API.swift │ ├── Managers │ │ ├── AudioManager.swift │ │ ├── DataManager.swift │ │ ├── FileManager.swift │ │ └── LocationManager.swift │ └── Objects │ │ ├── Book.swift │ │ ├── Music.swift │ │ └── User.swift │ ├── Resources │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── tabbar │ │ │ ├── Contents.json │ │ │ ├── ic-navi-refresh.imageset │ │ │ ├── Contents.json │ │ │ ├── icons8-refresh-32.png │ │ │ └── icons8-refresh-64.png │ │ │ ├── ic-tabbar-friends.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-user-groups-60.png │ │ │ ├── ic-tabbar-messages-selected.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-chat-96.png │ │ │ ├── ic-tabbar-messages.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-chat-96 (1).png │ │ │ ├── ic-tabbar-profile.imageset │ │ │ ├── Contents.json │ │ │ └── icons8-user-60.png │ │ │ └── tabbar-bg.imageset │ │ │ ├── 1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg │ │ │ └── Contents.json │ └── Base.lproj │ │ └── LaunchScreen.storyboard │ └── Views │ ├── Common │ ├── Button.swift │ └── Label.swift │ └── Custom │ ├── FXSliderView.swift │ ├── FXSliderView.xib │ ├── MyDatePickerView.swift │ └── MyDatePickerView.xib ├── 24Demo └── DemoSignInWithApple │ ├── DemoSignInWithApple.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── DemoSignInWithApple │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── DemoSignInWithApple.entitlements │ ├── Info.plist │ ├── SceneDelegate.swift │ └── ViewController.swift ├── 25UnitTest └── DemoUnitTest │ ├── DemoUnitTest.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── DemoUnitTest.xcscheme │ ├── DemoUnitTest │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ ├── Models │ │ └── Operator.swift │ ├── SceneDelegate.swift │ └── ViewController.swift │ └── DemoUnitTestTests │ ├── DemoUnitTestTests.swift │ ├── Info.plist │ └── OperatorTest.swift ├── 26ProtocolvsClosure └── ProtocolVSClosure │ ├── ProtocolVSClosure.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── ProtocolVSClosure.xcscheme │ └── ProtocolVSClosure │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Info.plist │ ├── Models │ └── Music.swift │ ├── Resources │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ └── Base.lproj │ │ └── LaunchScreen.storyboard │ └── ViewController │ ├── HomeVC │ ├── HomeViewController.swift │ ├── HomeViewController.xib │ └── HomeViewModel.swift │ ├── MenuVC │ ├── MenuViewController.swift │ └── MenuViewController.xib │ └── MusicsVC │ ├── MusicsViewController.swift │ ├── MusicsViewController.xib │ └── MusicsViewModel.swift ├── 27AsyncAwait ├── 01_async_await.playground │ ├── Pages │ │ ├── demo.xcplaygroundpage │ │ │ └── Contents.swift │ │ └── lythuyet.xcplaygroundpage │ │ │ └── Contents.swift │ ├── contents.xcplayground │ └── playground.xcworkspace │ │ └── contents.xcworkspacedata ├── AsyncSequenceDemo │ ├── AsyncSequenceDemo.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── AsyncSequenceDemo │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── SceneDelegate.swift │ │ ├── Typing.swift │ │ ├── ViewController.swift │ │ └── data.txt │ └── BasicAsyncSequence.playground │ │ ├── Contents.swift │ │ ├── contents.xcplayground │ │ └── playground.xcworkspace │ │ └── contents.xcworkspacedata ├── AsyncStreamDemo │ ├── AsyncStreamBasic.playground │ │ ├── Contents.swift │ │ ├── contents.xcplayground │ │ └── playground.xcworkspace │ │ │ └── contents.xcworkspacedata │ ├── AsyncStreamDemo.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── AsyncStreamDemo │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── SceneDelegate.swift │ │ └── ViewController.swift ├── DemoAPI │ ├── DemoAPI.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── DemoAPI │ │ ├── API │ │ ├── API.swift │ │ └── APIError.swift │ │ ├── AppDelegate │ │ ├── AppDelegate.swift │ │ └── SceneDelegate.swift │ │ ├── Entities │ │ ├── Category.swift │ │ └── Drink.swift │ │ ├── Info.plist │ │ ├── Resources │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── no-image.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── no-image.png │ │ └── Base.lproj │ │ │ └── LaunchScreen.storyboard │ │ └── ViewControllers │ │ ├── Base.lproj │ │ └── Main.storyboard │ │ ├── HomeVC │ │ ├── HomeViewController.swift │ │ └── HomeViewModel.swift │ │ ├── ViewController.swift │ │ └── Welcome │ │ ├── WelcomeViewController.swift │ │ ├── WelcomeViewModel.swift │ │ └── WelcomeViewModel2.swift ├── DemoProjectAsync │ ├── DemoProjectAsync.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── DemoProjectAsync │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── SceneDelegate.swift │ │ └── ViewController.swift ├── DetachedTaskDemo2 │ ├── DetachedTaskDemo2.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── DetachedTaskDemo2 │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── ContentView.swift │ │ ├── Info.plist │ │ ├── SceneDelegate.swift │ │ ├── User.swift │ │ └── ViewController.swift ├── NewConcurrency.playground │ ├── Contents.swift │ ├── contents.xcplayground │ └── playground.xcworkspace │ │ └── contents.xcworkspacedata ├── README.md ├── TaskLocalDemo │ ├── TaskLocalDemo.playground │ │ ├── Contents.swift │ │ ├── contents.xcplayground │ │ └── playground.xcworkspace │ │ │ └── contents.xcworkspacedata │ ├── TaskLocalDemo.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── TaskLocalDemo │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── SceneDelegate.swift │ │ └── ViewController.swift ├── Task_TaskGroup.playground │ ├── Contents.swift │ ├── contents.xcplayground │ └── playground.xcworkspace │ │ └── contents.xcworkspacedata └── UnstructuredConcurrency │ ├── Task.playground │ ├── Contents.swift │ ├── contents.xcplayground │ └── playground.xcworkspace │ │ └── contents.xcworkspacedata │ ├── UnstructuredConcurrency.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── UnstructuredConcurrency │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── SceneDelegate.swift │ └── ViewController.swift ├── 29Storyboard ├── DemoStoryboard │ ├── DemoStoryboard.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── DemoStoryboard │ │ ├── AppDelegate │ │ ├── AppDelegate.swift │ │ └── SceneDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── ViewControllers │ │ ├── AViewController.swift │ │ ├── BViewController.swift │ │ ├── CViewController.swift │ │ ├── HomeViewController.swift │ │ └── ViewController.swift └── MultipleStoryboard │ └── MultipleStoryboard │ ├── MultipleStoryboard.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── MultipleStoryboard │ ├── AppDelegate │ ├── AppDelegate.swift │ └── SceneDelegate.swift │ ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Info.plist │ ├── Storyboards │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── LoginFlow.storyboard │ ├── TabbarFlow.storyboard │ └── TutorialFlow.storyboard │ └── ViewControllers │ ├── Login │ ├── ForgotPasswordVC.swift │ ├── LoginVC.swift │ └── RegisterVC.swift │ ├── Tabbar │ ├── HomeVC.swift │ ├── MapVC.swift │ ├── ProfileVC.swift │ └── VideosVC.swift │ ├── Tutorial │ └── TutorialVC.swift │ └── ViewController.swift ├── 30Keychain ├── KeychainDemo │ ├── KeychainDemo.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── KeychainDemo │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── SceneDelegate.swift │ │ └── ViewController.swift ├── README.md ├── keychain_001.png └── keychain_002.png ├── 31UserDefaults └── DemoUserDefaults │ ├── DemoUserDefaults.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── DemoUserDefaults │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── SceneDelegate.swift │ └── ViewController.swift ├── 32FileManager ├── README.md └── WorkingWithFiles │ ├── WorkingWithFiles.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ ├── WorkingWithFiles │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── FileManger │ │ ├── FileHelper.swift │ │ └── FileIOController.swift │ ├── Info.plist │ ├── Resources │ │ └── hello_file.txt │ ├── SceneDelegate.swift │ └── ViewController.swift │ ├── WorkingWithFilesTests │ └── WorkingWithFilesTests.swift │ └── WorkingWithFilesUITests │ ├── WorkingWithFilesUITests.swift │ └── WorkingWithFilesUITestsLaunchTests.swift └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | ## Build generated 2 | build/ 3 | DerivedData 4 | build.xcarchive 5 | 6 | ## Various settings 7 | *.pbxuser 8 | !default.pbxuser 9 | *.mode1v3 10 | !default.mode1v3 11 | *.mode2v3 12 | !default.mode2v3 13 | *.perspectivev3 14 | !default.perspectivev3 15 | xcuserdata 16 | 17 | ## Other 18 | *.xccheckout 19 | *.moved-aside 20 | *.xcuserstate 21 | *.xcscmblueprint 22 | 23 | ## Obj-C/Swift specific 24 | *.hmap 25 | *.ipa 26 | 27 | # CocoaPods 28 | Pods/ 29 | 30 | # Carthage 31 | Carthage/Checkouts 32 | Carthage/Build 33 | -------------------------------------------------------------------------------- /01View/01View.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /01View/01View.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /01View/01View.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/01View/01View.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /01View/01View.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | 01View.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /01View/01View/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /01View/01View/Assets.xcassets/no_avatar.imageset/Blank-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/01View/01View/Assets.xcassets/no_avatar.imageset/Blank-avatar.png -------------------------------------------------------------------------------- /01View/01View/Assets.xcassets/no_avatar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Blank-avatar.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /02CustomView/02CustomView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /02CustomView/02CustomView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /02CustomView/02CustomView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/02CustomView/02CustomView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /02CustomView/02CustomView.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | 02CustomView.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /02CustomView/02CustomView/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /02CustomView/02CustomView/Resources/Assets.xcassets/hamster.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "hamter.jpeg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /02CustomView/02CustomView/Resources/Assets.xcassets/hamster.imageset/hamter.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/02CustomView/02CustomView/Resources/Assets.xcassets/hamster.imageset/hamter.jpeg -------------------------------------------------------------------------------- /02CustomView/02CustomView/Resources/Assets.xcassets/husky.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "husky.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /02CustomView/02CustomView/Resources/Assets.xcassets/husky.imageset/husky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/02CustomView/02CustomView/Resources/Assets.xcassets/husky.imageset/husky.png -------------------------------------------------------------------------------- /02CustomView/02CustomView/Resources/Assets.xcassets/no_avatar.imageset/Blank-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/02CustomView/02CustomView/Resources/Assets.xcassets/no_avatar.imageset/Blank-avatar.png -------------------------------------------------------------------------------- /02CustomView/02CustomView/Resources/Assets.xcassets/no_avatar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Blank-avatar.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /03TouchEvent/02TouchEvent.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /03TouchEvent/02TouchEvent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /03TouchEvent/02TouchEvent.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/03TouchEvent/02TouchEvent.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /03TouchEvent/02TouchEvent.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | 02TouchEvent.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /03TouchEvent/02TouchEvent/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /03TouchEvent/02TouchEvent/Assets.xcassets/ball.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ball.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /03TouchEvent/02TouchEvent/Assets.xcassets/ball.imageset/ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/03TouchEvent/02TouchEvent/Assets.xcassets/ball.imageset/ball.png -------------------------------------------------------------------------------- /04Drawing/04Drawing.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /04Drawing/04Drawing.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /04Drawing/04Drawing.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/04Drawing/04Drawing.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /04Drawing/04Drawing.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | 04Drawing.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /04Drawing/04Drawing/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /04Drawing/04Drawing/Views/FxRectangularView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FxRectangularView.swift 3 | // 04Drawing 4 | // 5 | // Created by Le Phuong Tien on 10/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FxRectangularView: UIView { 12 | 13 | override func draw(_ rect: CGRect) { 14 | // create path 15 | let path = createPath() 16 | 17 | // fill 18 | let fillColor = UIColor.orange 19 | fillColor.setFill() 20 | path.fill() 21 | } 22 | 23 | func createPath() -> UIBezierPath { 24 | let path = UIBezierPath(rect: self.bounds) 25 | return path 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /05AutoLayout/05AutoLayout.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /05AutoLayout/05AutoLayout.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /05AutoLayout/05AutoLayout.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/05AutoLayout/05AutoLayout.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /05AutoLayout/05AutoLayout.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | 05AutoLayout.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /05AutoLayout/05AutoLayout/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /05AutoLayout/05AutoLayout/Assets.xcassets/fx-studio-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "fx-studio-logo.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /05AutoLayout/05AutoLayout/Assets.xcassets/fx-studio-logo.imageset/fx-studio-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/05AutoLayout/05AutoLayout/Assets.xcassets/fx-studio-logo.imageset/fx-studio-logo.png -------------------------------------------------------------------------------- /05AutoLayout/05AutoLayout/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // 05AutoLayout 4 | // 5 | // Created by Le Phuong Tien on 10/22/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view. 16 | } 17 | 18 | 19 | } 20 | 21 | -------------------------------------------------------------------------------- /06StackView/06StackView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /06StackView/06StackView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /06StackView/06StackView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/06StackView/06StackView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /06StackView/06StackView.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | 06StackView.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /06StackView/06StackView/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /06StackView/06StackView/Assets.xcassets/fx-studio-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "fx-studio-logo.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /06StackView/06StackView/Assets.xcassets/fx-studio-logo.imageset/fx-studio-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/06StackView/06StackView/Assets.xcassets/fx-studio-logo.imageset/fx-studio-logo.png -------------------------------------------------------------------------------- /06StackView/06StackView/Assets.xcassets/swift-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "swift-icon-1.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /06StackView/06StackView/Assets.xcassets/swift-logo.imageset/swift-icon-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/06StackView/06StackView/Assets.xcassets/swift-logo.imageset/swift-icon-1.png -------------------------------------------------------------------------------- /06StackView/06StackView/Assets.xcassets/swiftui-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "swiftui-icon-1.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /06StackView/06StackView/Assets.xcassets/swiftui-logo.imageset/swiftui-icon-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/06StackView/06StackView/Assets.xcassets/swiftui-logo.imageset/swiftui-icon-1.png -------------------------------------------------------------------------------- /06StackView/06StackView/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // 06StackView 4 | // 5 | // Created by Le Phuong Tien on 10/23/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view. 16 | } 17 | 18 | 19 | } 20 | 21 | -------------------------------------------------------------------------------- /07Protocol/07Protocol.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /08Delegation/DelegateDemo/DelegateDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /08Delegation/DelegateDemo/DelegateDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /08Delegation/DelegateDemo/DelegateDemo.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/08Delegation/DelegateDemo/DelegateDemo.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /08Delegation/DelegateDemo/DelegateDemo.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DelegateDemo.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /08Delegation/DelegateDemo/DelegateDemo/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /08Delegation/DelegateDemo/DelegateDemo/Resources/Assets.xcassets/no_avatar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "no-avatar-png.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /08Delegation/DelegateDemo/DelegateDemo/Resources/Assets.xcassets/no_avatar.imageset/no-avatar-png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/08Delegation/DelegateDemo/DelegateDemo/Resources/Assets.xcassets/no_avatar.imageset/no-avatar-png.png -------------------------------------------------------------------------------- /08Delegation/DelegationSample.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /09ViewController/09ViewController.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /09ViewController/09ViewController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /09ViewController/09ViewController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/09ViewController/09ViewController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /09ViewController/09ViewController.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | 09ViewController.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /09ViewController/09ViewController/Controllers/Home/HomeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeViewController.swift 3 | // 09ViewController 4 | // 5 | // Created by Le Phuong Tien on 11/5/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class HomeViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | } 16 | 17 | override func loadView() { 18 | let view = UIView(frame: UIScreen.main.bounds) 19 | view.backgroundColor = .white 20 | 21 | self.view = view 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /09ViewController/09ViewController/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /10GCD/DemoGCD.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /10GCD/DemoGCD.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /10GCD/DemoGCD.playground/playground.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /10GCD/DemoGCD.playground/playground.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/10GCD/DemoGCD.playground/playground.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /11Navigation/DemoNavigation/DemoNavigation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /11Navigation/DemoNavigation/DemoNavigation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /11Navigation/DemoNavigation/DemoNavigation.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/11Navigation/DemoNavigation/DemoNavigation.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /11Navigation/DemoNavigation/DemoNavigation.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DemoNavigation.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /11Navigation/DemoNavigation/DemoNavigation/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /11Navigation/DemoNavigation/DemoNavigation/Resources/Assets.xcassets/setting-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-settings-48.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /11Navigation/DemoNavigation/DemoNavigation/Resources/Assets.xcassets/setting-icon.imageset/icons8-settings-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/11Navigation/DemoNavigation/DemoNavigation/Resources/Assets.xcassets/setting-icon.imageset/icons8-settings-48.png -------------------------------------------------------------------------------- /12Singleton/SingletonDemo.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /13MVC/MVC.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /13MVC/MVC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /13MVC/MVC.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/13MVC/MVC.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /13MVC/MVC.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | MVC.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /13MVC/MVC/Models/Calculator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Calculator.swift 3 | // MVC 4 | // 5 | // Created by Le Phuong Tien on 11/13/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | final class Calculator { 12 | func add(a: Float, b: Float) -> Float { 13 | return a + b 14 | } 15 | 16 | func sub(a: Float, b: Float) -> Float { 17 | return a - b 18 | } 19 | 20 | func mul(a: Float, b: Float) -> Float { 21 | return a * b 22 | } 23 | 24 | func div(a: Float, b: Float) -> Float { 25 | if b == 0 { 26 | return 0 27 | } else { 28 | return a / b 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /13MVC/MVC/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /14TableView/DemoTableView/DemoTableView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /14TableView/DemoTableView/DemoTableView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /14TableView/DemoTableView/DemoTableView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/14TableView/DemoTableView/DemoTableView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /14TableView/DemoTableView/DemoTableView.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DemoTableView.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /14TableView/DemoTableView/DemoTableView/Controllers/Detail/DetailViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailViewController.swift 3 | // DemoTableView 4 | // 5 | // Created by Le Phuong Tien on 11/18/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DetailViewController: UIViewController { 12 | 13 | @IBOutlet weak var nameLabel: UILabel! 14 | var name: String = "" 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | title = "Detail" 19 | 20 | nameLabel.text = name 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /14TableView/DemoTableView/DemoTableView/Models/User.swift: -------------------------------------------------------------------------------- 1 | // 2 | // User.swift 3 | // DemoTableView 4 | // 5 | // Created by Le Phuong Tien on 11/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | final class User { 12 | var name: String 13 | var age: Int 14 | var gender: Bool 15 | 16 | init(name: String, age: Int, gender: Bool) { 17 | self.name = name 18 | self.age = age 19 | self.gender = gender 20 | } 21 | 22 | func getSubTitle() -> String { 23 | return "\(gender ? "Male" : "Female") - \(age) year olds" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /14TableView/DemoTableView/DemoTableView/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /14TableView/DemoTableView/DemoTableView/Resources/Assets.xcassets/no-avatar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "no-avatar.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /14TableView/DemoTableView/DemoTableView/Resources/Assets.xcassets/no-avatar.imageset/no-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/14TableView/DemoTableView/DemoTableView/Resources/Assets.xcassets/no-avatar.imageset/no-avatar.png -------------------------------------------------------------------------------- /14TableView/ListContentView/ListContentView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /14TableView/ListContentView/ListContentView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /14TableView/ListContentView/ListContentView/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /14TableView/ListContentView/ListContentView/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /14TableView/RowActions/RowActions.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /14TableView/RowActions/RowActions.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /14TableView/RowActions/RowActions/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /14TableView/TableViewInTableView/TableViewInTableView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /14TableView/TableViewInTableView/TableViewInTableView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /14TableView/TableViewInTableView/TableViewInTableView/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /14TableView/TableViewInTableView/TableViewInTableView/Models/Homeitem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Homeitem.swift 3 | // TableViewInTableView 4 | // 5 | // Created by Le Phuong Tien on 4/16/20. 6 | // Copyright © 2020 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | final class HomeItem { 12 | var title = "" 13 | var index = 0 14 | var parentIndex = 0 15 | var isShowSubItem = false 16 | } 17 | -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DemoCollectionView.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Controllers/Home/Cell/HomeCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeCell.swift 3 | // DemoCollectionView 4 | // 5 | // Created by Le Phuong Tien on 12/4/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class HomeCell: UICollectionViewCell { 12 | 13 | @IBOutlet weak var avatarImageView: UIImageView! 14 | @IBOutlet weak var nameLabel: UILabel! 15 | 16 | override func awakeFromNib() { 17 | super.awakeFromNib() 18 | // Initialization code 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Controllers/Home/Header/HomeHeaderView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeHeaderView.swift 3 | // DemoCollectionView 4 | // 5 | // Created by Le Phuong Tien on 12/5/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class HomeHeaderView: UICollectionReusableView { 12 | 13 | @IBOutlet weak var titleLabel: UILabel! 14 | @IBOutlet weak var totalLabel: UILabel! 15 | 16 | override func awakeFromNib() { 17 | super.awakeFromNib() 18 | // Initialization code 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-female-user-100-2.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/0.imageset/icons8-female-user-100-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/0.imageset/icons8-female-user-100-2.png -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-female-user-101.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/1.imageset/icons8-female-user-101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/1.imageset/icons8-female-user-101.png -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-female-user-100.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/2.imageset/icons8-female-user-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/2.imageset/icons8-female-user-100.png -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-male-user-101.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/3.imageset/icons8-male-user-101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/3.imageset/icons8-male-user-101.png -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-male-user-100.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/4.imageset/icons8-male-user-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/4.imageset/icons8-male-user-100.png -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-100 (1).png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/5.imageset/icons8-user-100 (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/5.imageset/icons8-user-100 (1).png -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-100.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/6.imageset/icons8-user-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/6.imageset/icons8-user-100.png -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-male-100.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/7.imageset/icons8-user-male-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/7.imageset/icons8-user-male-100.png -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/8.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-male-101.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/8.imageset/icons8-user-male-101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/8.imageset/icons8-user-male-101.png -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/9.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-male-user-100.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/9.imageset/icons8-male-user-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/9.imageset/icons8-male-user-100.png -------------------------------------------------------------------------------- /15CollectionView/DemoCollectionView/DemoCollectionView/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Controllers/Home/Cell/HomeCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeCell.swift 3 | // DemoCollectionView 4 | // 5 | // Created by Le Phuong Tien on 12/4/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class HomeCell: UICollectionViewCell { 12 | 13 | @IBOutlet weak var thumbImageView: UIImageView! 14 | @IBOutlet weak var nameLabel: UILabel! 15 | 16 | override func awakeFromNib() { 17 | super.awakeFromNib() 18 | // Initialization code 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Controllers/Home/Header/HomeHeaderView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeHeaderView.swift 3 | // DemoCollectionView 4 | // 5 | // Created by Le Phuong Tien on 12/5/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class HomeHeaderView: UICollectionReusableView { 12 | 13 | @IBOutlet weak var titleLabel: UILabel! 14 | @IBOutlet weak var totalLabel: UILabel! 15 | 16 | override func awakeFromNib() { 17 | super.awakeFromNib() 18 | // Initialization code 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "flower1.jpg", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower1.imageset/flower1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower1.imageset/flower1.jpg -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower10.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "flower10.jpeg", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower10.imageset/flower10.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower10.imageset/flower10.jpeg -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "flower2.jpeg", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower2.imageset/flower2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower2.imageset/flower2.jpeg -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "flower3.jpg", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower3.imageset/flower3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower3.imageset/flower3.jpg -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "flower4.jpeg", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower4.imageset/flower4.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower4.imageset/flower4.jpeg -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "flower5.jpg", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower5.imageset/flower5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower5.imageset/flower5.jpg -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "flower6.jpg", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower6.imageset/flower6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower6.imageset/flower6.jpg -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "flower7.jpg", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower7.imageset/flower7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower7.imageset/flower7.jpg -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower8.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "flower8.jpeg", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower8.imageset/flower8.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower8.imageset/flower8.jpeg -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower9.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "flower9.jpeg", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower9.imageset/flower9.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/15CollectionView/DiffableDataSource/DiffableDataSource/Resources/Assets.xcassets/Flowers/flower9.imageset/flower9.jpeg -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DemoTabbarController.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Controllers/FriendsVC/FriendsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FriendsViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FriendsViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Controllers/HomeVC/HomeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class HomeViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Home" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Controllers/MessagesVC/MessagesViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessagesViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MessagesViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Messages" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Controllers/ProfileVC/ProfileViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProfileViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ProfileViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Profile" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-groups-60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-chat-96.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-chat-96 (1).png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg -------------------------------------------------------------------------------- /16TabbarController/DemoTabbarController/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /17MVVM/DemoMVVM.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM.zip -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DemoTabbarController.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Controllers/Base/BaseTabBarController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseTabBarController.swift 3 | // DemoMVVM 4 | // 5 | // Created by Tien Le P. on 7/12/18. 6 | // Copyright © 2018 Tien Le P. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BaseTabBarController: UITabBarController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | self.tabBar.tintColor = UIColor(red: 95.0/255.0, green: 75.0/255.0, blue: 139.0/255.0, alpha: 1.0) 16 | } 17 | 18 | override func didReceiveMemoryWarning() { 19 | super.didReceiveMemoryWarning() 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Controllers/FriendsVC/FriendsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FriendsViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FriendsViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Controllers/MessagesVC/MessagesViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessagesViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MessagesViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Messages" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Controllers/ProfileVC/ProfileViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProfileViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ProfileViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Profile" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Models/APIManager/Core/API.Manager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // API.Manager.swift 3 | // DemoNetworking 4 | // 5 | // Created by Le Phuong Tien on 12/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct APIManager { 12 | //MARK: Config 13 | struct Path { 14 | 15 | } 16 | 17 | //MARK: - Domain 18 | struct Music {} 19 | 20 | struct Downloader {} 21 | } 22 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Models/APIManager/Core/API.Request.swift: -------------------------------------------------------------------------------- 1 | // 2 | // API.Request.swift 3 | // DemoNetworking 4 | // 5 | // Created by Le Phuong Tien on 12/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension API { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Models/Ext/Data.Ext.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Data.Ext.swift 3 | // DemoNetworking 4 | // 5 | // Created by Le Phuong Tien on 12/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | typealias JSON = [String: Any] 12 | 13 | extension Data { 14 | func toJSON() -> JSON { 15 | var json: [String: Any] = [:] 16 | do { 17 | if let jsonObj = try JSONSerialization.jsonObject(with: self, options: .mutableContainers) as? JSON { 18 | json = jsonObj 19 | } 20 | } catch { 21 | print("JSON casting error") 22 | } 23 | return json 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Models/Networking/Networking.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Networking.swift 3 | // DemoNetworking 4 | // 5 | // Created by Le Phuong Tien on 12/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | final class Networking { 12 | //MARK: - singleton 13 | private static var sharedNetworking: Networking = { 14 | let networking = Networking() 15 | return networking 16 | }() 17 | 18 | class func shared() -> Networking { 19 | return sharedNetworking 20 | } 21 | 22 | //MARK: - init 23 | private init() {} 24 | } 25 | -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-groups-60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-chat-96.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-chat-96 (1).png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg -------------------------------------------------------------------------------- /17MVVM/DemoMVVM/DemoTabbarController/Resources/Assets.xcassets/tabbar-bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DemoNetworking.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Controllers/Base/BaseTabBarController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseTabBarController.swift 3 | // DemoMVVM 4 | // 5 | // Created by Tien Le P. on 7/12/18. 6 | // Copyright © 2018 Tien Le P. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BaseTabBarController: UITabBarController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | self.tabBar.tintColor = UIColor(red: 95.0/255.0, green: 75.0/255.0, blue: 139.0/255.0, alpha: 1.0) 16 | } 17 | 18 | override func didReceiveMemoryWarning() { 19 | super.didReceiveMemoryWarning() 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Controllers/FriendsVC/FriendsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FriendsViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FriendsViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Controllers/MessagesVC/MessagesViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessagesViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MessagesViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Messages" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Controllers/ProfileVC/ProfileViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProfileViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ProfileViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Profile" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Models/APIManager/Core/API.Manager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // API.Manager.swift 3 | // DemoNetworking 4 | // 5 | // Created by Le Phuong Tien on 12/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct APIManager { 12 | //MARK: Config 13 | struct Path { 14 | static let base_domain = "https://rss.itunes.apple.com" 15 | static let base_path = "/api/v1/us" 16 | 17 | static let music_path = "/itunes-music" 18 | static let music_hot = "/hot-tracks" 19 | } 20 | 21 | //MARK: - Domain 22 | struct Music {} 23 | 24 | struct Downloader {} 25 | } 26 | -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Models/Ext/Data.Ext.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Data.Ext.swift 3 | // DemoNetworking 4 | // 5 | // Created by Le Phuong Tien on 12/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | typealias JSON = [String: Any] 12 | 13 | extension Data { 14 | func toJSON() -> JSON { 15 | var json: [String: Any] = [:] 16 | do { 17 | if let jsonObj = try JSONSerialization.jsonObject(with: self, options: .mutableContainers) as? JSON { 18 | json = jsonObj 19 | } 20 | } catch { 21 | print("JSON casting error") 22 | } 23 | return json 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-navi-refresh.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icons8-refresh-32.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icons8-refresh-64.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-navi-refresh.imageset/icons8-refresh-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-navi-refresh.imageset/icons8-refresh-32.png -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-navi-refresh.imageset/icons8-refresh-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-navi-refresh.imageset/icons8-refresh-64.png -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-friends.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-groups-60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-friends.imageset/icons8-user-groups-60.png -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-chat-96.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages-selected.imageset/icons8-chat-96.png -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-chat-96 (1).png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-messages.imageset/icons8-chat-96 (1).png -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-profile.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/ic-tabbar-profile.imageset/icons8-user-60.png -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg -------------------------------------------------------------------------------- /18Networking/DemoNetworking/DemoNetworking/Resources/Assets.xcassets/tabbar-bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /18Networking/LoadingImage/LoadingImage.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /18Networking/LoadingImage/LoadingImage.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /18Networking/LoadingImage/LoadingImage/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'ProjectTemplate' do 5 | # Comment the next line if you don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for ProjectTemplate 9 | pod 'Alamofire', '~> 5.0.0-rc.3' 10 | 11 | end 12 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (5.0.0-rc.3) 3 | 4 | DEPENDENCIES: 5 | - Alamofire (~> 5.0.0-rc.3) 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - Alamofire 10 | 11 | SPEC CHECKSUMS: 12 | Alamofire: ca8c0de6906873be89d6deec5c8de279e00bf872 13 | 14 | PODFILE CHECKSUM: d84ebebb047d141dd408e274999087348bed4ba3 15 | 16 | COCOAPODS: 1.7.2 17 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (5.0.0-rc.3) 3 | 4 | DEPENDENCIES: 5 | - Alamofire (~> 5.0.0-rc.3) 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - Alamofire 10 | 11 | SPEC CHECKSUMS: 12 | Alamofire: ca8c0de6906873be89d6deec5c8de279e00bf872 13 | 14 | PODFILE CHECKSUM: d84ebebb047d141dd408e274999087348bed4ba3 15 | 16 | COCOAPODS: 1.7.2 17 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AlamofireVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Alamofire/Alamofire.modulemap: -------------------------------------------------------------------------------- 1 | framework module Alamofire { 2 | umbrella header "Alamofire-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Alamofire/Alamofire.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ProjectTemplate : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ProjectTemplate 5 | @end 6 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_ProjectTemplateVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_ProjectTemplateVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/Pods/Target Support Files/Pods-ProjectTemplate/Pods-ProjectTemplate.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_ProjectTemplate { 2 | umbrella header "Pods-ProjectTemplate-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ProjectTemplate.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 2 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Base/BaseNavigationController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseNavigationController.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BaseNavigationController: UINavigationController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Base/BaseTabBarController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseTabBarController.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BaseTabBarController: UITabBarController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Base/BaseViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseViewController.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BaseViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | setupData() 16 | setupUI() 17 | } 18 | 19 | func setupData() {} 20 | 21 | func setupUI() {} 22 | 23 | } 24 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/FriendsVC/FriendsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FriendsViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FriendsViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Home/Cells/HomeCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeCell.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class HomeCell: UITableViewCell { 12 | 13 | override func awakeFromNib() { 14 | super.awakeFromNib() 15 | // Initialization code 16 | } 17 | 18 | override func setSelected(_ selected: Bool, animated: Bool) { 19 | super.setSelected(selected, animated: animated) 20 | 21 | // Configure the view for the selected state 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Home/Cells/HomeCellViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeCellViewModel.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/20/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Home/HomeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeViewController.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class HomeViewController: BaseViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | } 16 | 17 | override func setupUI() { 18 | title = App.Text.titleHome 19 | } 20 | 21 | override func setupData() { 22 | 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/Home/HomeViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeViewModel.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/20/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/MessagesVC/MessagesViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessagesViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MessagesViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Messages" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Controllers/ProfileVC/ProfileViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProfileViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ProfileViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Profile" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Define/App.Color.swift: -------------------------------------------------------------------------------- 1 | // 2 | // App.Color.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension App.Color { 13 | static var mainColor = UIColor.lightGray 14 | static var textColor = UIColor.black 15 | static var titleColor = UIColor.blue 16 | 17 | //.... 18 | } 19 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Define/App.Key.swift: -------------------------------------------------------------------------------- 1 | // 2 | // App.Key.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension App.Key { 12 | static var authenToken = "....." 13 | 14 | static var admobID = "....." 15 | static var bannerID = "....." 16 | } 17 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Define/App.Text.swift: -------------------------------------------------------------------------------- 1 | // 2 | // App.Text.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension App.Text { 12 | //Information app 13 | static var appName = "Project Template" 14 | 15 | //Title 16 | static var titleHome = "Home" 17 | } 18 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Define/App.swift: -------------------------------------------------------------------------------- 1 | // 2 | // App.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct App { 12 | struct Key {} 13 | 14 | struct Text {} 15 | 16 | struct Color {} 17 | } 18 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Exts/Data.Ext.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Data.Ext.swift 3 | // DemoNetworking 4 | // 5 | // Created by Le Phuong Tien on 12/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | typealias JSON = [String: Any] 12 | 13 | extension Data { 14 | func toJSON() -> JSON { 15 | var json: [String: Any] = [:] 16 | do { 17 | if let jsonObj = try JSONSerialization.jsonObject(with: self, options: .mutableContainers) as? JSON { 18 | json = jsonObj 19 | } 20 | } catch { 21 | print("JSON casting error") 22 | } 23 | return json 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Models/API/Core/API.Manager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // API.Manager.swift 3 | // DemoNetworking 4 | // 5 | // Created by Le Phuong Tien on 12/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct APIManager { 12 | //MARK: Config 13 | struct Path { 14 | static let base_domain = "https://rss.itunes.apple.com" 15 | static let base_path = "/api/v1/us" 16 | 17 | static let music_path = "/itunes-music" 18 | static let music_hot = "/hot-tracks" 19 | } 20 | 21 | //MARK: - Domain 22 | struct Music {} 23 | 24 | struct Downloader {} 25 | } 26 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Models/Managers/AudioManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AudioManager.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Models/Managers/FileManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FileManager.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Models/Managers/LocationManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocationManager.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Models/Objects/User.swift: -------------------------------------------------------------------------------- 1 | // 2 | // User.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | final class User { 12 | var name: String 13 | var age: Int 14 | var gender: Bool 15 | 16 | init(name: String, age: Int, gender: Bool) { 17 | self.name = name 18 | self.age = age 19 | self.gender = gender 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icons8-refresh-32.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icons8-refresh-64.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-32.png -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-64.png -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-groups-60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/icons8-user-groups-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/icons8-user-groups-60.png -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-chat-96.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/icons8-chat-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/icons8-chat-96.png -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-chat-96 (1).png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/icons8-chat-96 (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/icons8-chat-96 (1).png -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/icons8-user-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/icons8-user-60.png -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Views/Common/Button.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Button.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class Button: UIButton { 12 | 13 | /* 14 | // Only override draw() if you perform custom drawing. 15 | // An empty implementation adversely affects performance during animation. 16 | override func draw(_ rect: CGRect) { 17 | // Drawing code 18 | } 19 | */ 20 | 21 | } 22 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Views/Common/Label.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Label.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class Label: UILabel { 12 | 13 | /* 14 | // Only override draw() if you perform custom drawing. 15 | // An empty implementation adversely affects performance during animation. 16 | override func draw(_ rect: CGRect) { 17 | // Drawing code 18 | } 19 | */ 20 | 21 | } 22 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Views/Custom/FXSliderView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FXSliderView.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FXSliderView: UIView { 12 | 13 | /* 14 | // Only override draw() if you perform custom drawing. 15 | // An empty implementation adversely affects performance during animation. 16 | override func draw(_ rect: CGRect) { 17 | // Drawing code 18 | } 19 | */ 20 | 21 | } 22 | -------------------------------------------------------------------------------- /19ProjectTemplate/ProjectTemplate/ProjectTemplate/Views/Custom/MyDatePickerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyDatePickerView.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MyDatePickerView: UIView { 12 | 13 | /* 14 | // Only override draw() if you perform custom drawing. 15 | // An empty implementation adversely affects performance during animation. 16 | override func draw(_ rect: CGRect) { 17 | // Drawing code 18 | } 19 | */ 20 | 21 | } 22 | -------------------------------------------------------------------------------- /20CoreData/DemoCoreData/DemoCoreData.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /20CoreData/DemoCoreData/DemoCoreData.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /20CoreData/DemoCoreData/DemoCoreData.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/20CoreData/DemoCoreData/DemoCoreData.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /20CoreData/DemoCoreData/DemoCoreData.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /20CoreData/DemoCoreData/DemoCoreData.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DemoCoreData.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 9E033D0F23AE19F800693E91 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /20CoreData/DemoCoreData/DemoCoreData/Models/CoreData/DemoCoreData.xcdatamodeld/.xccurrentversion: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | _XCCurrentVersionName 6 | DemoCoreData.xcdatamodel 7 | 8 | 9 | -------------------------------------------------------------------------------- /20CoreData/DemoCoreData/DemoCoreData/Models/CoreData/User+CoreDataClass.swift: -------------------------------------------------------------------------------- 1 | // 2 | // User+CoreDataClass.swift 3 | // DemoCoreData 4 | // 5 | // Created by Le Phuong Tien on 12/21/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | // 9 | 10 | import Foundation 11 | import CoreData 12 | 13 | @objc(User) 14 | public class User: NSManagedObject { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /20CoreData/DemoCoreData/DemoCoreData/Models/CoreData/User+CoreDataProperties.swift: -------------------------------------------------------------------------------- 1 | // 2 | // User+CoreDataProperties.swift 3 | // DemoCoreData 4 | // 5 | // Created by Le Phuong Tien on 12/21/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | // 9 | 10 | import Foundation 11 | import CoreData 12 | 13 | 14 | extension User { 15 | 16 | @nonobjc public class func fetchRequest() -> NSFetchRequest { 17 | return NSFetchRequest(entityName: "User") 18 | } 19 | 20 | @NSManaged public var age: Int16 21 | @NSManaged public var gender: Bool 22 | @NSManaged public var name: String? 23 | 24 | } 25 | -------------------------------------------------------------------------------- /20CoreData/DemoCoreData/DemoCoreData/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /21CoreLocation/DemoCoreLocation/DemoCoreLocation.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DemoCoreLocation.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /21CoreLocation/DemoCoreLocation/DemoCoreLocation/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /22MapView/DemoMap/DemoMap.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /22MapView/DemoMap/DemoMap.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /22MapView/DemoMap/DemoMap.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/22MapView/DemoMap/DemoMap.xcodeproj/project.xcworkspace/xcuserdata/lephuongtien.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /22MapView/DemoMap/DemoMap.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /22MapView/DemoMap/DemoMap.xcodeproj/xcuserdata/lephuongtien.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DemoMap.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/no_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Screen Shot 2019-12-26 at 4.15.19 PM.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/no_image.imageset/Screen Shot 2019-12-26 at 4.15.19 PM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/no_image.imageset/Screen Shot 2019-12-26 at 4.15.19 PM.png -------------------------------------------------------------------------------- /22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/pin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "pin.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/pin.imageset/pin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/22MapView/DemoMap/DemoMap/Resources/Assets.xcassets/pin.imageset/pin.png -------------------------------------------------------------------------------- /23Realm/DemoRealm/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'ProjectTemplate' do 5 | # Comment the next line if you don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for ProjectTemplate 9 | pod 'RealmSwift' 10 | 11 | end 12 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Realm (4.1.0): 3 | - Realm/Headers (= 4.1.0) 4 | - Realm/Headers (4.1.0) 5 | - RealmSwift (4.1.0): 6 | - Realm (= 4.1.0) 7 | 8 | DEPENDENCIES: 9 | - RealmSwift 10 | 11 | SPEC REPOS: 12 | https://github.com/cocoapods/specs.git: 13 | - Realm 14 | - RealmSwift 15 | 16 | SPEC CHECKSUMS: 17 | Realm: 5d1453468eca02c901c50b8a356f4a98a15b57aa 18 | RealmSwift: 1d238caa5c64a590c669beef1a7e858a6cf55a1c 19 | 20 | PODFILE CHECKSUM: dbfa2f5c3637ae2fc5f0a109a9b36a8c324c0cb4 21 | 22 | COCOAPODS: 1.7.2 23 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Controllers/Base/BaseNavigationController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseNavigationController.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BaseNavigationController: UINavigationController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Controllers/Base/BaseTabBarController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseTabBarController.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BaseTabBarController: UITabBarController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Controllers/Base/BaseViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseViewController.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BaseViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | setupData() 16 | setupUI() 17 | } 18 | 19 | func setupData() {} 20 | 21 | func setupUI() {} 22 | 23 | } 24 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Controllers/FriendsVC/FriendsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FriendsViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FriendsViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Controllers/Home/Cells/HomeCellViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeCellViewModel.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/20/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Controllers/MessagesVC/MessagesViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessagesViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MessagesViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Messages" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Controllers/ProfileVC/ProfileViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProfileViewController.swift 3 | // DemoTabbarController 4 | // 5 | // Created by Le Phuong Tien on 12/6/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ProfileViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "Profile" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Define/App.Color.swift: -------------------------------------------------------------------------------- 1 | // 2 | // App.Color.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension App.Color { 13 | static var mainColor = UIColor.lightGray 14 | static var textColor = UIColor.black 15 | static var titleColor = UIColor.blue 16 | 17 | //.... 18 | } 19 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Define/App.Key.swift: -------------------------------------------------------------------------------- 1 | // 2 | // App.Key.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension App.Key { 12 | static var authenToken = "....." 13 | 14 | static var admobID = "....." 15 | static var bannerID = "....." 16 | } 17 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Define/App.Text.swift: -------------------------------------------------------------------------------- 1 | // 2 | // App.Text.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension App.Text { 12 | //Information app 13 | static var appName = "Project Template" 14 | 15 | //Title 16 | static var titleHome = "Home" 17 | } 18 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Define/App.swift: -------------------------------------------------------------------------------- 1 | // 2 | // App.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct App { 12 | struct Key {} 13 | 14 | struct Text {} 15 | 16 | struct Color {} 17 | } 18 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Exts/Data.Ext.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Data.Ext.swift 3 | // DemoNetworking 4 | // 5 | // Created by Le Phuong Tien on 12/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | typealias JSON = [String: Any] 12 | 13 | extension Data { 14 | func toJSON() -> JSON { 15 | var json: [String: Any] = [:] 16 | do { 17 | if let jsonObj = try JSONSerialization.jsonObject(with: self, options: .mutableContainers) as? JSON { 18 | json = jsonObj 19 | } 20 | } catch { 21 | print("JSON casting error") 22 | } 23 | return json 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Models/API/Core/API.Manager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // API.Manager.swift 3 | // DemoNetworking 4 | // 5 | // Created by Le Phuong Tien on 12/17/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct APIManager { 12 | //MARK: Config 13 | struct Path { 14 | static let base_domain = "https://rss.itunes.apple.com" 15 | static let base_path = "/api/v1/us" 16 | 17 | static let music_path = "/itunes-music" 18 | static let music_hot = "/hot-tracks" 19 | } 20 | 21 | //MARK: - Domain 22 | struct Music {} 23 | 24 | struct Downloader {} 25 | } 26 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Models/Managers/AudioManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AudioManager.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Models/Managers/FileManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FileManager.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Models/Managers/LocationManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocationManager.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Models/Objects/Book.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Book.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 1/2/20. 6 | // Copyright © 2020 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import RealmSwift 11 | 12 | final class Book: Object { 13 | @objc dynamic var title = "" 14 | @objc dynamic var subTitle = "" 15 | @objc dynamic var price = 0 16 | 17 | override static func primaryKey() -> String? { 18 | return "title" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Models/Objects/User.swift: -------------------------------------------------------------------------------- 1 | // 2 | // User.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | final class User { 12 | var name: String 13 | var age: Int 14 | var gender: Bool 15 | 16 | init(name: String, age: Int, gender: Bool) { 17 | self.name = name 18 | self.age = age 19 | self.gender = gender 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icons8-refresh-32.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icons8-refresh-64.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-32.png -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-navi-refresh.imageset/icons8-refresh-64.png -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-groups-60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/icons8-user-groups-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-friends.imageset/icons8-user-groups-60.png -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-chat-96.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/icons8-chat-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages-selected.imageset/icons8-chat-96.png -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-chat-96 (1).png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/icons8-chat-96 (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-messages.imageset/icons8-chat-96 (1).png -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icons8-user-60.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/icons8-user-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/ic-tabbar-profile.imageset/icons8-user-60.png -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Resources/Assets.xcassets/tabbar/tabbar-bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "1_Eq5RYkyohCdbY5ZVGlZ6ZQ.jpeg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Views/Common/Button.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Button.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class Button: UIButton { 12 | 13 | /* 14 | // Only override draw() if you perform custom drawing. 15 | // An empty implementation adversely affects performance during animation. 16 | override func draw(_ rect: CGRect) { 17 | // Drawing code 18 | } 19 | */ 20 | 21 | } 22 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Views/Common/Label.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Label.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class Label: UILabel { 12 | 13 | /* 14 | // Only override draw() if you perform custom drawing. 15 | // An empty implementation adversely affects performance during animation. 16 | override func draw(_ rect: CGRect) { 17 | // Drawing code 18 | } 19 | */ 20 | 21 | } 22 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Views/Custom/FXSliderView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FXSliderView.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FXSliderView: UIView { 12 | 13 | /* 14 | // Only override draw() if you perform custom drawing. 15 | // An empty implementation adversely affects performance during animation. 16 | override func draw(_ rect: CGRect) { 17 | // Drawing code 18 | } 19 | */ 20 | 21 | } 22 | -------------------------------------------------------------------------------- /23Realm/DemoRealm/ProjectTemplate/Views/Custom/MyDatePickerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyDatePickerView.swift 3 | // ProjectTemplate 4 | // 5 | // Created by Le Phuong Tien on 12/19/19. 6 | // Copyright © 2019 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MyDatePickerView: UIView { 12 | 13 | /* 14 | // Only override draw() if you perform custom drawing. 15 | // An empty implementation adversely affects performance during animation. 16 | override func draw(_ rect: CGRect) { 17 | // Drawing code 18 | } 19 | */ 20 | 21 | } 22 | -------------------------------------------------------------------------------- /24Demo/DemoSignInWithApple/DemoSignInWithApple.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /24Demo/DemoSignInWithApple/DemoSignInWithApple.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /24Demo/DemoSignInWithApple/DemoSignInWithApple/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /24Demo/DemoSignInWithApple/DemoSignInWithApple/DemoSignInWithApple.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.applesignin 6 | 7 | Default 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /25UnitTest/DemoUnitTest/DemoUnitTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /25UnitTest/DemoUnitTest/DemoUnitTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /25UnitTest/DemoUnitTest/DemoUnitTest/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /25UnitTest/DemoUnitTest/DemoUnitTest/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // DemoUnitTest 4 | // 5 | // Created by Le Phuong Tien on 8/12/20. 6 | // Copyright © 2020 Fx Studio. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view. 16 | } 17 | 18 | 19 | } 20 | 21 | -------------------------------------------------------------------------------- /26ProtocolvsClosure/ProtocolVSClosure/ProtocolVSClosure.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /26ProtocolvsClosure/ProtocolVSClosure/ProtocolVSClosure.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /26ProtocolvsClosure/ProtocolVSClosure/ProtocolVSClosure/Models/Music.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Music.swift 3 | // ProtocolVSClosure 4 | // 5 | // Created by Le Phuong Tien on 12/28/20. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Music: Codable { 11 | var artistName: String 12 | var id: String 13 | var releaseDate: String 14 | var name: String 15 | var kind: String 16 | var copyright: String 17 | var artistId: String 18 | var artworkUrl100: String 19 | } 20 | 21 | struct MusicFeed : Codable { 22 | var results: [Music] 23 | } 24 | 25 | struct MusicResult: Codable { 26 | var feed: MusicFeed 27 | } 28 | -------------------------------------------------------------------------------- /26ProtocolvsClosure/ProtocolVSClosure/ProtocolVSClosure/Resources/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /26ProtocolvsClosure/ProtocolVSClosure/ProtocolVSClosure/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /27AsyncAwait/01_async_await.playground/Pages/demo.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- 1 | //: [Previous](@previous) 2 | 3 | import UIKit 4 | import PlaygroundSupport 5 | PlaygroundPage.current.needsIndefiniteExecution = true 6 | 7 | func hamA() async -> String { 8 | await withCheckedContinuation({ c in 9 | Thread.sleep(forTimeInterval: 2.0) 10 | c.resume(returning: "AAAA") 11 | }) 12 | } 13 | 14 | func hamB() async -> String { 15 | "BBBB" 16 | } 17 | 18 | async { 19 | print("#1") 20 | let a = await hamA() 21 | print("#2") 22 | let b = await hamB() 23 | print("\(a) & \(b)") 24 | } 25 | // 26 | //async { 27 | // print("#2") 28 | // await hamB() 29 | //} 30 | 31 | 32 | //: [Next](@next) 33 | -------------------------------------------------------------------------------- /27AsyncAwait/01_async_await.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /27AsyncAwait/01_async_await.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncSequenceDemo/AsyncSequenceDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncSequenceDemo/AsyncSequenceDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncSequenceDemo/AsyncSequenceDemo/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncSequenceDemo/AsyncSequenceDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncSequenceDemo/AsyncSequenceDemo/data.txt: -------------------------------------------------------------------------------- 1 | 20 2 | 19 3 | 998 4 | 654 5 | 1 6 | 29 7 | 54 8 | 72 9 | 29 10 | 1000 11 | 876 12 | 578 13 | 34 14 | 561 15 | 82 16 | 234 17 | 546 18 | 932 19 | 999 20 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncSequenceDemo/BasicAsyncSequence.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncSequenceDemo/BasicAsyncSequence.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncStreamDemo/AsyncStreamBasic.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncStreamDemo/AsyncStreamBasic.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncStreamDemo/AsyncStreamDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncStreamDemo/AsyncStreamDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncStreamDemo/AsyncStreamDemo/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncStreamDemo/AsyncStreamDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /27AsyncAwait/AsyncStreamDemo/AsyncStreamDemo/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // AsyncStreamDemo 4 | // 5 | // Created by Tien Le P. VN.Danang on 12/6/21. 6 | // 7 | 8 | import UIKit 9 | 10 | class ViewController: UIViewController { 11 | 12 | override func viewDidLoad() { 13 | super.viewDidLoad() 14 | // Do any additional setup after loading the view. 15 | } 16 | 17 | 18 | } 19 | 20 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoAPI/DemoAPI.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoAPI/DemoAPI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoAPI/DemoAPI/API/APIError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // APIError.swift 3 | // DemoAPI 4 | // 5 | // Created by Tien Le P. VN.Danang on 6/25/21. 6 | // 7 | 8 | import Foundation 9 | 10 | enum APIError: Error { 11 | case error(String) 12 | 13 | var localizedDescription: String { 14 | switch self { 15 | case .error(let string): 16 | return string 17 | 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoAPI/DemoAPI/Entities/Category.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Category.swift 3 | // DemoAPI 4 | // 5 | // Created by Tien Le P. VN.Danang on 6/25/21. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Category: Codable, Hashable { 11 | var strCategory: String 12 | } 13 | 14 | struct CategoryResult: Codable { 15 | var drinks: [Category] 16 | } 17 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoAPI/DemoAPI/Entities/Drink.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Drink.swift 3 | // DemoAPI 4 | // 5 | // Created by Tien Le P. VN.Danang on 6/25/21. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Drink: Codable { 11 | var strDrink: String 12 | var strDrinkThumb: String 13 | var idDrink: String 14 | } 15 | 16 | struct DrinkResult: Codable { 17 | var drinks: [Drink] 18 | } 19 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoAPI/DemoAPI/Resources/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoAPI/DemoAPI/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoAPI/DemoAPI/Resources/Assets.xcassets/no-image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "no-image.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoAPI/DemoAPI/Resources/Assets.xcassets/no-image.imageset/no-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/27AsyncAwait/DemoAPI/DemoAPI/Resources/Assets.xcassets/no-image.imageset/no-image.png -------------------------------------------------------------------------------- /27AsyncAwait/DemoProjectAsync/DemoProjectAsync.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoProjectAsync/DemoProjectAsync.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoProjectAsync/DemoProjectAsync/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /27AsyncAwait/DemoProjectAsync/DemoProjectAsync/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /27AsyncAwait/DetachedTaskDemo2/DetachedTaskDemo2.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/DetachedTaskDemo2/DetachedTaskDemo2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /27AsyncAwait/DetachedTaskDemo2/DetachedTaskDemo2/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /27AsyncAwait/DetachedTaskDemo2/DetachedTaskDemo2/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /27AsyncAwait/NewConcurrency.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /27AsyncAwait/NewConcurrency.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/README.md: -------------------------------------------------------------------------------- 1 | # Async / Await 2 | 3 | Đây là phần mới được cập nhật trong `Swift 5.5`. Do đó, nếu bạn vô tình tới được đây thì bạn cần phải cài đặt: 4 | 5 | * Xcode 13 (beta) 6 | * Swift 5.5 7 | 8 | Bên cạnh đó bạn cần có một lượng kiến thức nhất định về Concurrency nữa. 9 | 10 | Và đây là thư mục chưa mã nguồn demo cho phần `async/await` cho các bài viết đến từ **Fx Studio**. Bạn có thể truy cập website [Fx Studio](https://fxstudio.dev/) để được cập nhật nhiều hơn. 11 | 12 | --- 13 | 14 | Cảm ơn bạn đã đọc bài viết này! 15 | 16 | -------------------------------------------------------------------------------- /27AsyncAwait/TaskLocalDemo/TaskLocalDemo.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /27AsyncAwait/TaskLocalDemo/TaskLocalDemo.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/TaskLocalDemo/TaskLocalDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/TaskLocalDemo/TaskLocalDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /27AsyncAwait/TaskLocalDemo/TaskLocalDemo/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /27AsyncAwait/TaskLocalDemo/TaskLocalDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /27AsyncAwait/Task_TaskGroup.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /27AsyncAwait/Task_TaskGroup.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/UnstructuredConcurrency/Task.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /27AsyncAwait/UnstructuredConcurrency/Task.playground/playground.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/UnstructuredConcurrency/UnstructuredConcurrency.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /27AsyncAwait/UnstructuredConcurrency/UnstructuredConcurrency.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /27AsyncAwait/UnstructuredConcurrency/UnstructuredConcurrency/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /27AsyncAwait/UnstructuredConcurrency/UnstructuredConcurrency/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /29Storyboard/DemoStoryboard/DemoStoryboard.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /29Storyboard/DemoStoryboard/DemoStoryboard.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /29Storyboard/DemoStoryboard/DemoStoryboard/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /29Storyboard/DemoStoryboard/DemoStoryboard/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /29Storyboard/DemoStoryboard/DemoStoryboard/ViewControllers/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // DemoStoryboard 4 | // 5 | // Created by Tien Le P. VN.Danang on 1/10/22. 6 | // 7 | 8 | import UIKit 9 | 10 | class ViewController: UIViewController { 11 | 12 | override func viewDidLoad() { 13 | super.viewDidLoad() 14 | // Do any additional setup after loading the view. 15 | } 16 | 17 | 18 | } 19 | 20 | -------------------------------------------------------------------------------- /29Storyboard/MultipleStoryboard/MultipleStoryboard/MultipleStoryboard.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /29Storyboard/MultipleStoryboard/MultipleStoryboard/MultipleStoryboard.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /29Storyboard/MultipleStoryboard/MultipleStoryboard/MultipleStoryboard/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /29Storyboard/MultipleStoryboard/MultipleStoryboard/MultipleStoryboard/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /30Keychain/KeychainDemo/KeychainDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /30Keychain/KeychainDemo/KeychainDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /30Keychain/KeychainDemo/KeychainDemo/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /30Keychain/KeychainDemo/KeychainDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /30Keychain/keychain_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/30Keychain/keychain_001.png -------------------------------------------------------------------------------- /30Keychain/keychain_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fx-studio/BasiciOSTutorial/79d823f590241813fa70ad6d3e4822d1051d36bd/30Keychain/keychain_002.png -------------------------------------------------------------------------------- /31UserDefaults/DemoUserDefaults/DemoUserDefaults.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /31UserDefaults/DemoUserDefaults/DemoUserDefaults.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /31UserDefaults/DemoUserDefaults/DemoUserDefaults/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /31UserDefaults/DemoUserDefaults/DemoUserDefaults/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /32FileManager/WorkingWithFiles/WorkingWithFiles.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /32FileManager/WorkingWithFiles/WorkingWithFiles.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /32FileManager/WorkingWithFiles/WorkingWithFiles/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /32FileManager/WorkingWithFiles/WorkingWithFiles/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /32FileManager/WorkingWithFiles/WorkingWithFiles/Resources/hello_file.txt: -------------------------------------------------------------------------------- 1 | Hello, Fx Studio! 2 | --------------------------------------------------------------------------------