├── .gitattributes ├── .gitignore ├── .swift-version ├── 01《招聘一个靠谱的iOS》面试题参考答案 ├── Deme_39_CYLSystemAPIMemoryLeak │ ├── Deme_39_CYLSystemAPIMemoryLeak.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ ├── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcuserdata │ │ │ │ └── chenyilong.xcuserdatad │ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ │ └── chenyilong.xcuserdatad │ │ │ ├── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ ├── Deme_39_CYLSystemAPIMemoryLeak │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── CYLBaseViewController+CYLBaseViewControllerExtension.h │ │ ├── CYLBaseViewController+CYLBaseViewControllerExtension.m │ │ ├── CYLBaseViewController.h │ │ ├── CYLBaseViewController.m │ │ ├── GCDBlock.h │ │ ├── GCDBlock.m │ │ ├── Info.plist │ │ ├── NSNotificationCenterBlock.h │ │ ├── NSNotificationCenterBlock.m │ │ ├── NSNotificationCenterIVARBlock.h │ │ ├── NSNotificationCenterIVARBlock.m │ │ ├── NSOperationQueueBlock.h │ │ ├── NSOperationQueueBlock.m │ │ ├── NSOperationQueueIVARBlock.h │ │ ├── NSOperationQueueIVARBlock.m │ │ ├── SceneDelegate.h │ │ ├── SceneDelegate.m │ │ ├── UIViewAnimationsBlock.h │ │ ├── UIViewAnimationsBlock.m │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ └── main.m │ ├── Deme_39_CYLSystemAPIMemoryLeakTests │ │ ├── Deme_39_CYLSystemAPIMemoryLeakTests.m │ │ └── Info.plist │ └── Deme_39_CYLSystemAPIMemoryLeakUITests │ │ ├── Deme_39_CYLSystemAPIMemoryLeakUITests.m │ │ └── Info.plist ├── Demo_01_CodeStyle │ ├── Demo_01_CodeStyle.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ ├── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcuserdata │ │ │ │ └── chenyilong.xcuserdatad │ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ │ └── chenyilong.xcuserdatad │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ ├── Demo_01_CodeStyle │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── SceneDelegate.h │ │ ├── SceneDelegate.m │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ ├── main.cpp │ │ └── main.m │ ├── Demo_01_CodeStyleTests │ │ ├── Demo_01_CodeStyleTests.m │ │ └── Info.plist │ └── Demo_01_CodeStyleUITests │ │ ├── Demo_01_CodeStyleUITests.m │ │ └── Info.plist ├── Demo_13题_用@property声明的NSString或NSArray_NSDictionary_经常使用copy关键字_为什么_如果改用strong关键字_可能造成什么问题 │ └── CYLMutableArrayCopyDmo │ │ ├── CYLArrayCopyDmo.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcuserdata │ │ │ │ └── chenyilong.xcuserdatad │ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ │ └── chenyilong.xcuserdatad │ │ │ ├── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ │ └── xcschemes │ │ │ ├── CYLArrayCopyDmo.xcscheme │ │ │ └── xcschememanagement.plist │ │ └── CYLArrayCopyDmo │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ └── main.m ├── Demo_21题_下面的代码输出什么 │ └── 为什么不推荐在init方法中使用点语法 │ │ ├── 为什么不推荐在init方法中使用点语法.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcuserdata │ │ │ │ └── chenyilong.xcuserdatad │ │ │ │ ├── UserInterfaceState.xcuserstate │ │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcuserdata │ │ │ └── chenyilong.xcuserdatad │ │ │ ├── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ │ └── xcschemes │ │ │ ├── xcschememanagement.plist │ │ │ └── 为什么不推荐在init方法中使用点语法.xcscheme │ │ └── 为什么不推荐在init方法中使用点语法 │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ │ ├── ChenPerson.h │ │ ├── ChenPerson.m │ │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Info.plist │ │ ├── Person.h │ │ ├── Person.m │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ └── main.m ├── Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么 │ └── _objc_msgForward_demo │ │ ├── _objc_msgForward_demo.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ ├── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcuserdata │ │ │ │ └── chenyilong.xcuserdatad │ │ │ │ ├── UserInterfaceState.xcuserstate │ │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcuserdata │ │ │ └── chenyilong.xcuserdatad │ │ │ └── xcschemes │ │ │ ├── _objc_msgForward_demo.xcscheme │ │ │ └── xcschememanagement.plist │ │ ├── _objc_msgForward_demo │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.xib │ │ │ └── Main.storyboard │ │ ├── Father.h │ │ ├── Father.m │ │ ├── ForwardingTarge.h │ │ ├── ForwardingTarge.m │ │ ├── Images.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── Info.plist │ │ ├── Son.h │ │ ├── Son.m │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ └── main.m │ │ └── _objc_msgForward_demoTests │ │ ├── Info.plist │ │ └── _objc_msgForward_demoTests.m ├── Demo_38_block_edit_var │ ├── Demo_38_block_edit_var.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ ├── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── xcuserdata │ │ │ │ └── chenyilong.xcuserdatad │ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ │ └── chenyilong.xcuserdatad │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ ├── Demo_38_block_edit_var │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── SceneDelegate.h │ │ ├── SceneDelegate.m │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ ├── main-in-cpp.zip │ │ └── main.m │ ├── Demo_38_block_edit_varTests │ │ ├── Demo_38_block_edit_varTests.m │ │ └── Info.plist │ └── Demo_38_block_edit_varUITests │ │ ├── Demo_38_block_edit_varUITests.m │ │ └── Info.plist ├── Demo_46题与51题_KVO原理_如何手动触发一个value的KVO │ ├── KVO实现原理.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcuserdata │ │ │ │ └── chenyilong.xcuserdatad │ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ │ └── chenyilong.xcuserdatad │ │ │ ├── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ │ └── xcschemes │ │ │ ├── KVO实现原理.xcscheme │ │ │ └── xcschememanagement.plist │ └── KVO实现原理 │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ └── main.m ├── assets │ ├── 16909544760924.jpg │ ├── 54_How to_debug_the_BAD_ACCESS_error.jpg │ ├── 54_How to_debug_the_BAD_ACCESS_error_01.jpg │ ├── 54_How to_debug_the_BAD_ACCESS_error_02.jpg │ └── Screen Shot 2023-08-02 at 20.15.47.png ├── 《招聘一个靠谱的iOS》面试题参考答案(上).md └── 《招聘一个靠谱的iOS》面试题参考答案(下).md ├── 02_Swift_interview_questions ├── README.md ├── Software_Development_Terminology.md ├── assets │ ├── 1-1.jpg │ ├── 1-2.jpg │ ├── 1-3.jpg │ ├── 1-4.jpg │ ├── 1.jpg │ ├── 1.png │ ├── 10.jpg │ ├── 11.jpg │ ├── 16912874108037.jpg │ ├── 16912874480991.jpg │ ├── 16912874813432.jpg │ ├── 16912875027729.jpg │ ├── 16913169429010.jpg │ ├── 16914714232134.jpg │ ├── 16918516162699.jpg │ ├── 16919848599418.jpg │ ├── 16919852605513.jpg │ ├── 2-1.jpg │ ├── 2-2.jpg │ ├── 2.jpg │ ├── 2.png │ ├── 3-1.jpg │ ├── 3-2.jpg │ ├── 3.jpg │ ├── 3.png │ ├── 4-1.jpg │ ├── 4-2.jpg │ ├── 4.jpg │ ├── 4.png │ ├── 5-1.jpg │ ├── 5-2.jpg │ ├── 5.jpg │ ├── 5.png │ ├── 6-1.jpg │ ├── 6.jpg │ ├── 6.png │ ├── 7-1.jpg │ ├── 7.jpg │ ├── 7.png │ ├── 8.PNG │ ├── 8.jpg │ ├── 9.jpg │ ├── 9.png │ └── reactive_programming_qa │ │ ├── cn.jpg │ │ └── en.jpg ├── practical.md └── theory.md ├── Behavioral_based_interviewing_Competency_Based ├── assets │ ├── 4-1.jpg │ ├── 5-1.jpg │ ├── 6-1.jpg │ ├── 7-1.jpg │ └── behavioral-question.jpg ├── objective_qa.md ├── subjective_qa.md └── technical_qa.md ├── Other └── TechnicalDesignDocumentDemo │ ├── Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952 │ ├── %E6%9E%B6%E6%9E%84%E5%9B%BE.png │ ├── HungryAppArchitecture.graffle │ ├── Untitled 1.png │ ├── Untitled 2.png │ ├── Untitled 3.png │ ├── Untitled 4.png │ ├── Untitled.jpeg │ ├── Untitled.png │ ├── catch_work_%E5%9F%BA%E6%9C%AC%E6%B5%81%E7%A8%8B%E5%9B%BE_(2).png │ └── “Hungry Hippo” iOS Application .xmind │ └── README.md ├── README.md ├── Swift ├── AnniversaryCalculator │ ├── AnniversaryCalculator.xmind │ ├── AnniversaryCalculatorDemo.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── chenyilong.xcuserdatad │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ ├── AnniversaryCalculatorDemo │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Couple.swift │ │ ├── DateExtension.swift │ │ ├── Info.plist │ │ ├── SceneDelegate.swift │ │ ├── ViewController.swift │ │ └── ViewModel.swift │ ├── AnniversaryCalculatorDemoTests │ │ └── AnniversaryCalculatorDemoTests.swift │ ├── AnniversaryCalculatorDemoUITests │ │ ├── AnniversaryCalculatorDemoUITests.swift │ │ └── AnniversaryCalculatorDemoUITestsLaunchTests.swift │ ├── Architecture.png │ └── README.md ├── MVVMDemo │ ├── LICENSE │ ├── README.md │ ├── banner.png │ ├── iOSTest.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── xcshareddata │ │ │ └── xcschemes │ │ │ │ └── iOSTest.xcscheme │ │ └── xcuserdata │ │ │ └── chenyilong.xcuserdatad │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ ├── iOSTest │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── ThemeColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── alertColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── refreshControlBgColor.colorset │ │ │ │ └── Contents.json │ │ │ └── userIconPlaceholder.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── userIconPlaceholder.jpg │ │ ├── Base.lproj │ │ │ └── LaunchScreen.storyboard │ │ ├── Helpers │ │ │ ├── Observable.swift │ │ │ └── UIColor+Extension.swift │ │ ├── Info.plist │ │ ├── Model │ │ │ ├── API │ │ │ │ ├── Networking.swift │ │ │ │ └── Repository.swift │ │ │ ├── Comments.swift │ │ │ ├── Contents.swift │ │ │ ├── Entity │ │ │ │ ├── Comment.swift │ │ │ │ ├── ContentModel.swift │ │ │ │ └── Post.swift │ │ │ └── Posts.swift │ │ ├── SceneDelegate.swift │ │ ├── View │ │ │ ├── BaseCell.swift │ │ │ ├── BaseContentDetailViewController.swift │ │ │ ├── BaseContentListViewController.swift │ │ │ ├── ClassIdenfifiable.swift │ │ │ ├── CommentDetailViewController.swift │ │ │ ├── CommentListTableViewCell.swift │ │ │ ├── CommentListViewController.swift │ │ │ ├── EmptyViewTableViewCell.swift │ │ │ ├── PostDetailViewController.swift │ │ │ ├── PostListTableViewCell.swift │ │ │ ├── PostListViewController.swift │ │ │ └── UITableView+Extension.swift │ │ └── ViewModel │ │ │ ├── CommentCellViewModel.swift │ │ │ ├── CommentListViewModel.swift │ │ │ ├── ContentCellViewModelProtocol.swift │ │ │ ├── ContentListViewModelProtocol.swift │ │ │ ├── PostCellViewModel.swift │ │ │ ├── PostListViewModel.swift │ │ │ └── RowViewModel.swift │ ├── iOSTestTests │ │ ├── MockURLProtocol.swift │ │ ├── emptyData.json │ │ ├── errorData.json │ │ ├── iOSTestTests.swift │ │ ├── nilData.json │ │ ├── rightCommentData.json │ │ └── rightPostData.json │ ├── iOSTestUITests │ │ ├── iOSTestUITests.swift │ │ └── iOSTestUITestsLaunchTests.swift │ └── preview.gif ├── MVVMTest │ ├── README.md │ ├── iOSTest.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── chenyilong.xcuserdatad │ │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ ├── iOSTest │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── Observable.swift │ │ ├── Order.swift │ │ ├── OrderCell.storyboard │ │ ├── OrderCell.swift │ │ ├── OrderCell.xib │ │ ├── OrderCellViewModel.swift │ │ ├── OrderListCell.swift │ │ ├── OrderListCell.xib │ │ ├── OrderListViewController.swift │ │ ├── Product.swift │ │ ├── RowViewModel.swift │ │ ├── SceneDelegate.swift │ │ ├── ViewController.swift │ │ └── ViewModel.swift │ ├── iOSTestTests │ │ └── iOSTestTests.swift │ └── iOSTestUITests │ │ ├── iOSTestUITests.swift │ │ └── iOSTestUITestsLaunchTests.swift ├── Other │ ├── CleanSwiftObjC │ │ ├── CHANGELOG.md │ │ ├── Clean Swift │ │ │ ├── Interactor.xctemplate │ │ │ │ ├── Objective-C │ │ │ │ │ ├── ___FILEBASENAME___Interactor.h │ │ │ │ │ └── ___FILEBASENAME___Interactor.m │ │ │ │ ├── Swift │ │ │ │ │ └── ___FILEBASENAME___Interactor.swift │ │ │ │ ├── TemplateIcon.png │ │ │ │ ├── TemplateIcon@2x.png │ │ │ │ └── TemplateInfo.plist │ │ │ ├── Models.xctemplate │ │ │ │ ├── Objective-C │ │ │ │ │ ├── ___FILEBASENAME___Models.h │ │ │ │ │ └── ___FILEBASENAME___Models.m │ │ │ │ ├── Swift │ │ │ │ │ └── ___FILEBASENAME___Models.swift │ │ │ │ ├── TemplateIcon.png │ │ │ │ ├── TemplateIcon@2x.png │ │ │ │ └── TemplateInfo.plist │ │ │ ├── Presenter.xctemplate │ │ │ │ ├── Objective-C │ │ │ │ │ ├── ___FILEBASENAME___Presenter.h │ │ │ │ │ └── ___FILEBASENAME___Presenter.m │ │ │ │ ├── Swift │ │ │ │ │ └── ___FILEBASENAME___Presenter.swift │ │ │ │ ├── TemplateIcon.png │ │ │ │ ├── TemplateIcon@2x.png │ │ │ │ └── TemplateInfo.plist │ │ │ ├── Router.xctemplate │ │ │ │ ├── Objective-C │ │ │ │ │ ├── ___FILEBASENAME___Router.h │ │ │ │ │ └── ___FILEBASENAME___Router.m │ │ │ │ ├── Swift │ │ │ │ │ └── ___FILEBASENAME___Router.swift │ │ │ │ ├── TemplateIcon.png │ │ │ │ ├── TemplateIcon@2x.png │ │ │ │ └── TemplateInfo.plist │ │ │ ├── Scene.xctemplate │ │ │ │ ├── TemplateIcon.png │ │ │ │ ├── TemplateIcon@2x.png │ │ │ │ ├── TemplateInfo.plist │ │ │ │ ├── UICollectionViewControllerObjective-C │ │ │ │ │ ├── ___FILEBASENAME___Common.h │ │ │ │ │ ├── ___FILEBASENAME___Interactor.h │ │ │ │ │ ├── ___FILEBASENAME___Interactor.m │ │ │ │ │ ├── ___FILEBASENAME___Models.h │ │ │ │ │ ├── ___FILEBASENAME___Models.m │ │ │ │ │ ├── ___FILEBASENAME___Presenter.h │ │ │ │ │ ├── ___FILEBASENAME___Presenter.m │ │ │ │ │ ├── ___FILEBASENAME___Router.h │ │ │ │ │ ├── ___FILEBASENAME___Router.m │ │ │ │ │ ├── ___FILEBASENAME___ViewController.h │ │ │ │ │ ├── ___FILEBASENAME___ViewController.m │ │ │ │ │ ├── ___FILEBASENAME___Worker.h │ │ │ │ │ └── ___FILEBASENAME___Worker.m │ │ │ │ ├── UICollectionViewControllerSwift │ │ │ │ │ ├── ___FILEBASENAME___Interactor.swift │ │ │ │ │ ├── ___FILEBASENAME___Models.swift │ │ │ │ │ ├── ___FILEBASENAME___Presenter.swift │ │ │ │ │ ├── ___FILEBASENAME___Router.swift │ │ │ │ │ ├── ___FILEBASENAME___ViewController.swift │ │ │ │ │ └── ___FILEBASENAME___Worker.swift │ │ │ │ ├── UITableViewControllerObjective-C │ │ │ │ │ ├── ___FILEBASENAME___Common.h │ │ │ │ │ ├── ___FILEBASENAME___Interactor.h │ │ │ │ │ ├── ___FILEBASENAME___Interactor.m │ │ │ │ │ ├── ___FILEBASENAME___Models.h │ │ │ │ │ ├── ___FILEBASENAME___Models.m │ │ │ │ │ ├── ___FILEBASENAME___Presenter.h │ │ │ │ │ ├── ___FILEBASENAME___Presenter.m │ │ │ │ │ ├── ___FILEBASENAME___Router.h │ │ │ │ │ ├── ___FILEBASENAME___Router.m │ │ │ │ │ ├── ___FILEBASENAME___ViewController.h │ │ │ │ │ ├── ___FILEBASENAME___ViewController.m │ │ │ │ │ ├── ___FILEBASENAME___Worker.h │ │ │ │ │ └── ___FILEBASENAME___Worker.m │ │ │ │ ├── UITableViewControllerSwift │ │ │ │ │ ├── ___FILEBASENAME___Interactor.swift │ │ │ │ │ ├── ___FILEBASENAME___Models.swift │ │ │ │ │ ├── ___FILEBASENAME___Presenter.swift │ │ │ │ │ ├── ___FILEBASENAME___Router.swift │ │ │ │ │ ├── ___FILEBASENAME___ViewController.swift │ │ │ │ │ └── ___FILEBASENAME___Worker.swift │ │ │ │ ├── UIViewControllerObjective-C │ │ │ │ │ ├── ___FILEBASENAME___Common.h │ │ │ │ │ ├── ___FILEBASENAME___Interactor.h │ │ │ │ │ ├── ___FILEBASENAME___Interactor.m │ │ │ │ │ ├── ___FILEBASENAME___Models.h │ │ │ │ │ ├── ___FILEBASENAME___Models.m │ │ │ │ │ ├── ___FILEBASENAME___Presenter.h │ │ │ │ │ ├── ___FILEBASENAME___Presenter.m │ │ │ │ │ ├── ___FILEBASENAME___Router.h │ │ │ │ │ ├── ___FILEBASENAME___Router.m │ │ │ │ │ ├── ___FILEBASENAME___ViewController.h │ │ │ │ │ ├── ___FILEBASENAME___ViewController.m │ │ │ │ │ ├── ___FILEBASENAME___Worker.h │ │ │ │ │ └── ___FILEBASENAME___Worker.m │ │ │ │ └── UIViewControllerSwift │ │ │ │ │ ├── ___FILEBASENAME___Interactor.swift │ │ │ │ │ ├── ___FILEBASENAME___Models.swift │ │ │ │ │ ├── ___FILEBASENAME___Presenter.swift │ │ │ │ │ ├── ___FILEBASENAME___Router.swift │ │ │ │ │ ├── ___FILEBASENAME___ViewController.swift │ │ │ │ │ └── ___FILEBASENAME___Worker.swift │ │ │ ├── Unit Tests.xctemplate │ │ │ │ ├── Objective-C │ │ │ │ │ ├── ___FILEBASENAME___InteractorTests.m │ │ │ │ │ ├── ___FILEBASENAME___PresenterTests.m │ │ │ │ │ ├── ___FILEBASENAME___ViewControllerTests.m │ │ │ │ │ └── ___FILEBASENAME___WorkerTests.m │ │ │ │ ├── Swift │ │ │ │ │ ├── ___FILEBASENAME___InteractorTests.swift │ │ │ │ │ ├── ___FILEBASENAME___PresenterTests.swift │ │ │ │ │ ├── ___FILEBASENAME___ViewControllerTests.swift │ │ │ │ │ └── ___FILEBASENAME___WorkerTests.swift │ │ │ │ ├── TemplateIcon.png │ │ │ │ ├── TemplateIcon@2x.png │ │ │ │ └── TemplateInfo.plist │ │ │ ├── View Controller.xctemplate │ │ │ │ ├── TemplateIcon.png │ │ │ │ ├── TemplateIcon@2x.png │ │ │ │ ├── TemplateInfo.plist │ │ │ │ ├── UICollectionViewControllerObjective-C │ │ │ │ │ ├── ___FILEBASENAME___ViewController.h │ │ │ │ │ └── ___FILEBASENAME___ViewController.m │ │ │ │ ├── UICollectionViewControllerSwift │ │ │ │ │ └── ___FILEBASENAME___ViewController.swift │ │ │ │ ├── UITableViewControllerObjective-C │ │ │ │ │ ├── ___FILEBASENAME___ViewController.h │ │ │ │ │ └── ___FILEBASENAME___ViewController.m │ │ │ │ ├── UITableViewControllerSwift │ │ │ │ │ └── ___FILEBASENAME___ViewController.swift │ │ │ │ ├── UIViewControllerObjective-C │ │ │ │ │ ├── ___FILEBASENAME___ViewController.h │ │ │ │ │ └── ___FILEBASENAME___ViewController.m │ │ │ │ └── UIViewControllerSwift │ │ │ │ │ └── ___FILEBASENAME___ViewController.swift │ │ │ └── Worker.xctemplate │ │ │ │ ├── Objective-C │ │ │ │ ├── ___FILEBASENAME___Worker.h │ │ │ │ └── ___FILEBASENAME___Worker.m │ │ │ │ ├── Swift │ │ │ │ └── ___FILEBASENAME___Worker.swift │ │ │ │ ├── TemplateIcon.png │ │ │ │ ├── TemplateIcon@2x.png │ │ │ │ └── TemplateInfo.plist │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── README.md │ │ └── VERSION │ └── CodingChallenge │ │ ├── .gitignore │ │ ├── CachableAsyncImage │ │ ├── .gitignore │ │ ├── .swiftpm │ │ │ └── xcode │ │ │ │ └── package.xcworkspace │ │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Package.swift │ │ ├── README.md │ │ ├── Sources │ │ │ └── CachableAsyncImage │ │ │ │ ├── CAsyncImage.swift │ │ │ │ ├── ImageCache.swift │ │ │ │ ├── ImageLoader.swift │ │ │ │ └── PlaceholderImageView.swift │ │ └── Tests │ │ │ └── CachableAsyncImageTests │ │ │ └── CachableAsyncImageTests.swift │ │ ├── NetworkingProvider │ │ ├── .gitignore │ │ ├── .swiftpm │ │ │ └── xcode │ │ │ │ └── package.xcworkspace │ │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Package.swift │ │ ├── README.md │ │ ├── Sources │ │ │ └── NetworkingProvider │ │ │ │ ├── NetworkEnviroment.swift │ │ │ │ ├── NetworkService.swift │ │ │ │ ├── NetworkingProvider.swift │ │ │ │ ├── RequestError.swift │ │ │ │ ├── Session.swift │ │ │ │ └── SessionProtocol.swift │ │ └── Tests │ │ │ └── NetworkingProviderTests │ │ │ └── NetworkingProviderTests.swift │ │ ├── WeltCodingChallenge │ │ ├── Resource │ │ │ ├── ResultPage1.json │ │ │ ├── ResultPage2.json │ │ │ └── UserDetail.json │ │ ├── WeltCodingChallenge.xcodeproj │ │ │ └── project.pbxproj │ │ ├── WeltCodingChallenge │ │ │ ├── Adaptors │ │ │ │ ├── SearchResultAdaptor.swift │ │ │ │ └── UserDetailAdaptor.swift │ │ │ ├── Assets.xcassets │ │ │ │ ├── AccentColor.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── AppIcon.appiconset │ │ │ │ │ ├── 1024.png │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ ├── Define │ │ │ │ ├── ErrorDefine.swift │ │ │ │ ├── ImageName.swift │ │ │ │ └── SizeDefine.swift │ │ │ ├── Models │ │ │ │ ├── GithubUser.swift │ │ │ │ ├── SearchedUserModel.swift │ │ │ │ └── UserDetailModel.swift │ │ │ ├── Modifiers │ │ │ │ └── HiddenModifier.swift │ │ │ ├── Preview Content │ │ │ │ └── Preview Assets.xcassets │ │ │ │ │ └── Contents.json │ │ │ ├── Repositories │ │ │ │ ├── CommonNetworkDefine.swift │ │ │ │ ├── Context.swift │ │ │ │ ├── SearchListRepository │ │ │ │ │ ├── SearchListRepoProtocol.swift │ │ │ │ │ ├── SearchListRepository.swift │ │ │ │ │ └── SearchUserNetworkService.swift │ │ │ │ ├── ServiceClient.swift │ │ │ │ └── UserDetailRepository │ │ │ │ │ ├── UserDetailNetworkService.swift │ │ │ │ │ ├── UserDetailRepoProtocol.swift │ │ │ │ │ └── UserDetailRepository.swift │ │ │ ├── SearchList │ │ │ │ ├── SearchListReducer.swift │ │ │ │ ├── SearchListService │ │ │ │ │ ├── SearchListService+Dependencies.swift │ │ │ │ │ ├── SearchListService+Live.swift │ │ │ │ │ ├── SearchListService+Test.swift │ │ │ │ │ └── SearchListService.swift │ │ │ │ └── SearchListView.swift │ │ │ ├── Top │ │ │ │ └── WeltCodingChallengeApp.swift │ │ │ └── UserDetail │ │ │ │ ├── UserDetailReducer.swift │ │ │ │ ├── UserDetailService │ │ │ │ ├── UserDetailService+Dependencies.swift │ │ │ │ ├── UserDetailService+Live.swift │ │ │ │ ├── UserDetailService+Test.swift │ │ │ │ └── UserDetailService.swift │ │ │ │ └── UserDetailView.swift │ │ └── WeltCodingChallengeTests │ │ │ ├── SearchListTests.swift │ │ │ └── UserDetailTests.swift │ │ └── iOS_CodingChallenge.pdf └── Swift101 │ ├── Swift101.xcodeproj │ └── project.pbxproj │ ├── Swift101 │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── BaseCell.swift │ ├── ClassIdenfifiable.swift │ ├── Info.plist │ ├── SceneDelegate.swift │ └── ViewController.swift │ ├── Swift101Tests │ ├── Swift101Tests.swift │ └── SwiftPlaygroundTest.swift │ └── Swift101UITests │ ├── Swift101UITests.swift │ └── Swift101UITestsLaunchTests.swift ├── SwiftUI ├── SwiftUI101 │ ├── README.md │ ├── SwiftUI101.xcodeproj │ │ └── project.pbxproj │ ├── SwiftUI101 │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── ContentView.swift │ │ ├── MyCustomCell.swift │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ └── SwiftUI101App.swift │ ├── SwiftUI101Tests │ │ └── SwiftUI101Tests.swift │ ├── SwiftUI101UITests │ │ ├── SwiftUI101UITests.swift │ │ └── SwiftUI101UITestsLaunchTests.swift │ └── preview.gif ├── SwiftUIDemo │ ├── README.md │ ├── SwiftUIDemo.xcodeproj │ │ └── project.pbxproj │ ├── SwiftUIDemo │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── ContentView.swift │ │ ├── Helpers │ │ │ ├── Observable.swift │ │ │ └── UIColor+Extension.swift │ │ ├── Model │ │ │ ├── API │ │ │ │ └── Repository.swift │ │ │ ├── Comment.swift │ │ │ ├── ContentModel.swift │ │ │ └── Post.swift │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ ├── SwiftUIDemoApp.swift │ │ └── ViewModel │ │ │ ├── CommentCellViewModel.swift │ │ │ ├── CommentListViewModel.swift │ │ │ ├── ContentCellViewModelProtocol.swift │ │ │ ├── ContentListViewModelProtocol.swift │ │ │ ├── PostCellViewModel.swift │ │ │ ├── PostListViewModel.swift │ │ │ └── RowViewModel.swift │ ├── SwiftUIDemoTests │ │ └── SwiftUIDemoTests.swift │ ├── SwiftUIDemoUITests │ │ ├── SwiftUIDemoUITests.swift │ │ └── SwiftUIDemoUITestsLaunchTests.swift │ ├── banner.png │ └── preview.gif ├── SwiftUIMVPattern_MovieApp │ ├── MovieApp.xcodeproj │ │ └── project.pbxproj │ └── MovieApp │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── ContentView.swift │ │ ├── Info.plist │ │ ├── Models │ │ ├── Movie.swift │ │ ├── MovieDetail.swift │ │ ├── MovieResponse.swift │ │ ├── NewsArticle.swift │ │ └── NewsArticleResponse.swift │ │ ├── MovieAppApp.swift │ │ ├── MovieDetailView.swift │ │ ├── Preview Content │ │ └── Preview Assets.xcassets │ │ │ └── Contents.json │ │ ├── Services │ │ └── Webservice.swift │ │ └── Stores │ │ └── Store.swift ├── SwiftUIMVVM_MovieApp │ ├── MovieApp.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── MovieApp.xcscheme │ └── MovieApp │ │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Extensions │ │ ├── Date+Extensions.swift │ │ └── View+Extensions.swift │ │ ├── Info.plist │ │ ├── Managers │ │ └── CoreDataManager.swift │ │ ├── Models │ │ ├── Actor+Extensions.swift │ │ ├── BaseModel.swift │ │ ├── Movie+Extensions.swift │ │ └── Review+Extensions.swift │ │ ├── MovieAppApp.swift │ │ ├── MovieAppModel.xcdatamodeld │ │ └── MovieAppModel.xcdatamodel │ │ │ └── contents │ │ ├── Preview Content │ │ └── Preview Assets.xcassets │ │ │ └── Contents.json │ │ ├── Screens │ │ ├── ActorDetailsScreen.swift │ │ ├── ActorListScreen.swift │ │ ├── AddActorScreen.swift │ │ ├── AddMovieScreen.swift │ │ ├── AddReviewScreen.swift │ │ ├── MovieDetailScreen.swift │ │ ├── MovieListScreen.swift │ │ └── ReviewListScreen.swift │ │ ├── View Models │ │ ├── ActorListViewModel.swift │ │ ├── AddActorViewModel.swift │ │ ├── AddMovieViewModel.swift │ │ ├── AddReviewViewModel.swift │ │ ├── MovieListViewModel.swift │ │ └── ReviewListViewModel.swift │ │ └── Views │ │ └── RatingView.swift ├── SwiftUIRedux │ ├── SwiftUIRedux.xcodeproj │ │ └── project.pbxproj │ ├── SwiftUIRedux │ │ ├── AddTaskView.swift │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── ContentView.swift │ │ ├── Models │ │ │ └── Task.swift │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ ├── Store │ │ │ ├── Store.swift │ │ │ ├── middlewares │ │ │ │ ├── IncrementMiddleware.swift │ │ │ │ └── LogMiddleware.swift │ │ │ └── reducers │ │ │ │ ├── AppReducer.swift │ │ │ │ ├── CounterReducer.swift │ │ │ │ └── TaskReducer.swift │ │ └── SwiftUIReduxApp.swift │ ├── SwiftUIReduxTests │ │ └── SwiftUIReduxTests.swift │ └── SwiftUIReduxUITests │ │ ├── SwiftUIReduxUITests.swift │ │ └── SwiftUIReduxUITestsLaunchTests.swift ├── SwiftUIRedux_MovieApp │ ├── ReduxAsync.xcodeproj │ │ └── project.pbxproj │ ├── Shared │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── placeholder.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── placeholder.png │ │ ├── Extensions │ │ │ ├── String+Extensions.swift │ │ │ └── View+Extensions.swift │ │ ├── HelloReduxApp.swift │ │ ├── Loaders │ │ │ └── ImageLoader.swift │ │ ├── Models │ │ │ ├── Movie.swift │ │ │ └── MovieDetail.swift │ │ ├── Services │ │ │ └── Webservice.swift │ │ ├── Store │ │ │ ├── Middlewares │ │ │ │ └── MoviesMiddleware.swift │ │ │ ├── Store.swift │ │ │ └── reducers │ │ │ │ ├── AppReducer.swift │ │ │ │ └── MoviesReducer.swift │ │ ├── Utils │ │ │ └── Constants.swift │ │ └── Views │ │ │ ├── ContentView.swift │ │ │ ├── MovieDetailsView.swift │ │ │ ├── RatingView.swift │ │ │ └── URLImage.swift │ ├── iOS │ │ └── Info.plist │ └── macOS │ │ ├── Info.plist │ │ └── macOS.entitlements ├── SwiftUIRedux_MovieApp_101 │ ├── HelloRedux.xcodeproj │ │ └── project.pbxproj │ └── HelloRedux │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ │ ├── ContentView.swift │ │ ├── Info.plist │ │ ├── Models │ │ └── Movie.swift │ │ ├── Preview Content │ │ └── Preview Assets.xcassets │ │ │ └── Contents.json │ │ ├── SceneDelegate.swift │ │ ├── Services │ │ └── MovieService.swift │ │ ├── Store │ │ └── Store.swift │ │ └── Utils │ │ └── Constants.swift ├── SwiftUIRedux_RestRoomFinder │ ├── RestRoomFinder.xcodeproj │ │ └── project.pbxproj │ ├── RestRoomFinder │ │ ├── Assets.xcassets │ │ │ ├── AccentColor.colorset │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Extensions │ │ │ ├── String+Extensions.swift │ │ │ └── View+Extensions.swift │ │ ├── Info.plist │ │ ├── Managers │ │ │ ├── LocationManager │ │ │ │ └── LocationManager.swift │ │ │ ├── Logger │ │ │ │ ├── ConsoleLogger.swift │ │ │ │ └── Logger.swift │ │ │ └── Network Manager │ │ │ │ ├── MainNetworkManager.swift │ │ │ │ └── NetworkManager.swift │ │ ├── Models │ │ │ └── Restroom.swift │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ ├── RestRoomFinderApp.swift │ │ ├── Services │ │ │ └── RestroomService.swift │ │ ├── Store │ │ │ ├── Actions │ │ │ │ └── Actions.swift │ │ │ ├── Middlewares │ │ │ │ └── RestroomsMiddleware.swift │ │ │ ├── Reducers │ │ │ │ ├── AppReducer.swift │ │ │ │ └── RestroomReducer.swift │ │ │ └── Store.swift │ │ ├── Utils │ │ │ └── Constants.swift │ │ └── Views │ │ │ ├── HomeScreen.swift │ │ │ └── RestroomListRow.swift │ ├── RestRoomFinderTests │ │ └── RestRoomFinderTests.swift │ └── RestRoomFinderUITests │ │ ├── RestRoomFinderUITests.swift │ │ └── RestRoomFinderUITestsLaunchTests.swift └── SwiftUI_CoreData │ ├── HelloCoreData.xcodeproj │ └── project.pbxproj │ └── HelloCoreData │ ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── ContentView.swift │ ├── HelloCoreData.xcdatamodeld │ └── HelloCoreData.xcdatamodel │ │ └── contents │ ├── HelloCoreDataApp.swift │ ├── Info.plist │ ├── Managers │ └── CoreDataManager.swift │ └── Preview Content │ └── Preview Assets.xcassets │ └── Contents.json ├── assets ├── 16911993105830.jpg ├── 16911993775698.jpg ├── 16911993939541.jpg ├── 16911994019477.jpg ├── 16911994188320.jpg ├── 16911994290631.jpg ├── 16911994377956.jpg ├── 16911994601308.jpg ├── 16911994672006.jpg ├── 16911994768336.jpg ├── 16911994872119.jpg ├── 16911994941254.jpg ├── 16911995736181.jpg ├── 16911995859741.jpg ├── 16911995927355.jpg ├── 16911996015251.jpg ├── 16911996112667.jpg ├── 16911996216316.jpg ├── 16911996296998.jpg ├── 16911996385220.jpg ├── 16911996457612.jpg ├── 16911996525270.jpg ├── 16911996627336.jpg ├── 16911996707498.jpg ├── 16911996765839.jpg ├── 16911996818935.jpg ├── 16911997093380.jpg ├── 16912025406113.jpg ├── 16912026477007.jpg ├── 16912073172453.jpg ├── 16912073267482.jpg ├── 16912073397523.jpg ├── 16912073494698.jpg ├── 16912073606938.jpg ├── 16912073940590.jpg ├── 16912074008587.jpg ├── 16912074108843.jpg ├── 16912074297283.jpg ├── 16912074367818.jpg ├── CleanArchitecture │ ├── CleanArchitectureQ1.jpg │ ├── CleanArchitectureQ2.jpg │ └── CleanArchitectureQ3.jpg ├── MVVM_Clean_SOLID │ ├── banner_cn.png │ ├── banner_en.png │ ├── cn.png │ ├── en.png │ ├── tca_horizontal_layer.png │ └── tca_onion_layering.png ├── Property_Wrapper_in_SwiftUI.jpg ├── Property_Wrapper_in_SwiftUI │ ├── ios16_code.png │ ├── ios16_overview.png │ ├── ios16_pros_cons.png │ ├── ios17_code.png │ ├── ios17_overview.png │ └── ios17_pros_cons.png ├── SCRUM_PROCESS.jpg ├── SwiftUI_and_Combine.png ├── SwiftUI_and_Combine.xmind ├── SwiftUI_vs_UIKit_Lifecycle_Methods_Difference.jpg ├── Swift_practical_Interview_Questions.jpg ├── Swift_theory_Interview_Questions.jpg ├── TCA_Each_View_has_its_Store_architecture_design_pattern.png ├── TCA_schema_architecture_design_pattern.jpg ├── VIPER_architecture_design_pattern │ ├── 1.jpg │ ├── VIPER_architecture_design_pattern_model.jpg │ └── viper_architecture_design_pattern_en.jpg ├── VIPER_architecture_design_pattern_model.gif ├── asynchronous_APIs_in_iOS │ ├── cn.jpg │ └── en.jpg ├── closure_vs_block │ ├── banner.jpg │ ├── closure_vs_block_map.jpg │ ├── closure_vs_block_question1.jpg │ ├── closure_vs_block_question2.jpg │ └── closure_vs_block_question3.jpg ├── iTeaTime-omnigraffle-模版.graffle │ ├── data.plist │ ├── image3.tiff │ └── preview.jpeg ├── mindmap_of_Behavioral_based_interviewing_Competency_Based.png ├── mindmap_of_Behavioral_based_interviewing_Competency_Based.xmind ├── mindmap_of_Swift_interview_question.xmind ├── mvp_architecture_design_pattern.graffle ├── mvp_architecture_design_pattern.png ├── mvp_architecture_design_pattern │ ├── mvp_architecture_design_pattern_QA.jpg │ ├── mvp_architecture_design_pattern_cn.jpg │ ├── mvp_architecture_design_pattern_en.jpg │ └── mvp_architecture_design_pattern_presenters_replace_controller.jpg ├── mvp_architecture_design_pattern_presenters_replace_controller.gif ├── mvvm_architecture_design_pattern.graffle ├── mvvm_architecture_design_pattern.png ├── mvvm_architecture_design_pattern │ ├── mvvm_architecture_design_pattern_cn.jpg │ └── mvvm_architecture_design_pattern_en.jpg ├── pair_programming.jpg ├── pair_programming_process_driver-navigator-diagram.png ├── pair_programming_process_softwarequal-pair_programming_styles-f.png ├── redux_architecture_design_pattern.graffle ├── redux_architecture_design_pattern.png ├── redux_architecture_design_pattern │ ├── redux_architecture_design_pattern_QA.png │ ├── redux_architecture_design_pattern_copy1.png │ ├── redux_architecture_design_pattern_copy2.png │ └── redux_architecture_design_pattern_en.png ├── redux_architecture_design_pattern_copy.graffle ├── redux_architecture_design_pattern_copy.png ├── redux_swiftui_architecture_design_pattern.graffle ├── redux_swiftui_architecture_design_pattern.png ├── solid │ ├── 1.jpg │ ├── 10.jpg │ ├── 11.jpg │ ├── 12.jpg │ ├── 13.jpg │ ├── 14.jpg │ ├── 2.jpg │ ├── 3.jpg │ ├── 4.jpg │ ├── 5.jpg │ ├── 6.jpg │ ├── 7.jpg │ ├── 8.jpg │ └── 9.jpg ├── swift-combine.jpg ├── swift_map_type_diff │ ├── swift_map_type_diff_cn.jpg │ └── swift_map_type_diff_en.jpg ├── tca_architecture_design_pattern.graffle ├── tca_architecture_design_pattern.png ├── tca_architecture_design_pattern │ ├── tca_architecture_design_pattern_QA.png │ └── tca_architecture_design_pattern_en.png ├── viper_architecture_design_pattern.graffle └── viper_architecture_design_pattern.png ├── banner-coding-challenge.png ├── banner.png └── cross-platform └── ReactNativeDemo ├── .expo ├── README.md ├── devices.json └── prebuild │ └── cached-packages.json ├── .gitignore ├── App.tsx ├── LICENSE ├── RCTRandomColorGeneratorModule.podspec ├── RCTRandomColorGeneratorModule ├── RCTRandomColorGeneratorModule.xcodeproj │ └── project.pbxproj └── RCTRandomColorGeneratorModule │ ├── RCTRandomColorGeneratorModule.h │ └── RCTRandomColorGeneratorModule.m ├── READEM_resources_run_preview.gif ├── README.md ├── RandomColorGenerator ├── .expo-shared │ └── assets.json ├── .gitignore ├── App.js ├── app.json ├── assets │ ├── adaptive-icon.png │ ├── favicon.png │ ├── icon.png │ └── splash.png ├── babel.config.js └── package.json ├── app.json ├── index.js ├── ios ├── .gitignore ├── .xcode.env ├── Podfile ├── Podfile.properties.json ├── reactnativerandomcolorgenerator.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ ├── reactnativerandomcolorgenerator.xcscheme │ │ └── reactnativerandomcolorgeneratorTests.xcscheme ├── reactnativerandomcolorgenerator.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── reactnativerandomcolorgenerator │ ├── AppDelegate.h │ ├── AppDelegate.mm │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── SplashScreenBackground.imageset │ │ │ ├── Contents.json │ │ │ └── image.png │ ├── Info.plist │ ├── SplashScreen.storyboard │ ├── Supporting │ │ └── Expo.plist │ ├── main.m │ ├── noop-file.swift │ └── reactnativerandomcolorgenerator.entitlements └── reactnativerandomcolorgeneratorTests │ └── reactnativerandomcolorgeneratorTests.m ├── jest.config.js ├── metro.config.js ├── package.json ├── tsconfig.json └── yarn.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | *.cpp linguist-detectable=false 2 | 3 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "self:Deme_39_CYLSystemAPIMemoryLeak.xcodeproj"> 6 | </FileRef> 7 | </Workspace> 8 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>IDEDidComputeMac32BitWarning</key> 6 | <true/> 7 | </dict> 8 | </plist> 9 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>SchemeUserState</key> 6 | <dict> 7 | <key>Deme_39_CYLSystemAPIMemoryLeak.xcscheme_^#shared#^_</key> 8 | <dict> 9 | <key>orderHint</key> 10 | <integer>0</integer> 11 | </dict> 12 | </dict> 13 | </dict> 14 | </plist> 15 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface AppDelegate : UIResponder <UIApplicationDelegate> 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/CYLBaseViewController+CYLBaseViewControllerExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLBaseViewController+CYLBaseViewControllerExtension.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/7. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import "CYLBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface CYLBaseViewController (CYLBaseViewControllerExtension) 14 | 15 | - (void)cyl_test; 16 | + (void)cyl_testClass; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/CYLBaseViewController+CYLBaseViewControllerExtension.m: -------------------------------------------------------------------------------- 1 | // 2 | // CYLBaseViewController+CYLBaseViewControllerExtension.m 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/7. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import "CYLBaseViewController+CYLBaseViewControllerExtension.h" 10 | 11 | @implementation CYLBaseViewController (CYLBaseViewControllerExtension) 12 | 13 | - (void)cyl_test { 14 | NSLog(@"🔴类名与方法名:%@(在第%@行), 描述:%@", @(__PRETTY_FUNCTION__), @(__LINE__), @""); 15 | } 16 | 17 | + (void)cyl_testClass { 18 | NSLog(@"🔴类名与方法名:%@(在第%@行), 描述:%@", @(__PRETTY_FUNCTION__), @(__LINE__), @""); 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/CYLBaseViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLBaseViewController.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "CYLBaseViewController.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface CYLBaseViewController : UIViewController 15 | @property (nonatomic, copy) NSString *text; 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/GCDBlock.h: -------------------------------------------------------------------------------- 1 | // 2 | // GCDBlock.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "CYLBaseViewController.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface GCDBlock : CYLBaseViewController 15 | @property (weak, nonatomic) IBOutlet UITextView *textView; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/NSNotificationCenterBlock.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSNotificationCenterBlock.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "CYLBaseViewController.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface NSNotificationCenterBlock : CYLBaseViewController 15 | @property (weak, nonatomic) IBOutlet UITextView *textView; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/NSNotificationCenterIVARBlock.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSNotificationCenterIVARBlock.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "CYLBaseViewController.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface NSNotificationCenterIVARBlock : CYLBaseViewController 15 | @property (weak, nonatomic) IBOutlet UITextView *textView; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/NSOperationQueueBlock.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSOperationQueueBlock.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "CYLBaseViewController.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface NSOperationQueueBlock : CYLBaseViewController 15 | @property (weak, nonatomic) IBOutlet UITextView *textView; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/NSOperationQueueIVARBlock.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSOperationQueueIVARBlock.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "CYLBaseViewController.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface NSOperationQueueIVARBlock : CYLBaseViewController 15 | @property (weak, nonatomic) IBOutlet UITextView *textView; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/SceneDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface SceneDelegate : UIResponder <UIWindowSceneDelegate> 12 | 13 | @property (strong, nonatomic) UIWindow * window; 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/UIViewAnimationsBlock.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewAnimationsBlock.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "CYLBaseViewController.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface UIViewAnimationsBlock : CYLBaseViewController 15 | @property (weak, nonatomic) IBOutlet UITextView *textView; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface ViewController : UITableViewController 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Deme_39_CYLSystemAPIMemoryLeak/Deme_39_CYLSystemAPIMemoryLeak/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Deme_39_CYLSystemAPIMemoryLeak 4 | // 5 | // Created by chenyilong on 2020/6/1. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | NSString * appDelegateClassName; 14 | @autoreleasepool { 15 | // Setup code that might create autoreleased objects goes here. 16 | appDelegateClassName = NSStringFromClass([AppDelegate class]); 17 | } 18 | return UIApplicationMain(argc, argv, nil, appDelegateClassName); 19 | } 20 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_01_CodeStyle/Demo_01_CodeStyle.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "self:Demo_01_CodeStyle.xcodeproj"> 6 | </FileRef> 7 | </Workspace> 8 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_01_CodeStyle/Demo_01_CodeStyle.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>IDEDidComputeMac32BitWarning</key> 6 | <true/> 7 | </dict> 8 | </plist> 9 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_01_CodeStyle/Demo_01_CodeStyle.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/Demo_01_CodeStyle/Demo_01_CodeStyle.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_01_CodeStyle/Demo_01_CodeStyle.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>SchemeUserState</key> 6 | <dict> 7 | <key>Demo_01_CodeStyle.xcscheme_^#shared#^_</key> 8 | <dict> 9 | <key>orderHint</key> 10 | <integer>0</integer> 11 | </dict> 12 | </dict> 13 | </dict> 14 | </plist> 15 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_01_CodeStyle/Demo_01_CodeStyle/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // Demo_01_CodeStyle 4 | // 5 | // Created by chenyilong on 2020/6/3. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface AppDelegate : UIResponder <UIApplicationDelegate> 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_01_CodeStyle/Demo_01_CodeStyle/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_01_CodeStyle/Demo_01_CodeStyle/SceneDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.h 3 | // Demo_01_CodeStyle 4 | // 5 | // Created by chenyilong on 2020/6/3. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface SceneDelegate : UIResponder <UIWindowSceneDelegate> 12 | 13 | @property (strong, nonatomic) UIWindow * window; 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_01_CodeStyle/Demo_01_CodeStyle/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // Demo_01_CodeStyle 4 | // 5 | // Created by chenyilong on 2020/6/3. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_01_CodeStyle/Demo_01_CodeStyle/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // Demo_01_CodeStyle 4 | // 5 | // Created by chenyilong on 2020/6/3. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | 11 | @interface ViewController () 12 | 13 | @end 14 | 15 | @implementation ViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_13题_用@property声明的NSString或NSArray_NSDictionary_经常使用copy关键字_为什么_如果改用strong关键字_可能造成什么问题/CYLMutableArrayCopyDmo/CYLArrayCopyDmo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "self:/Users/chenyilong/Dropbox/Xcode/Demo/CYLMutableArrayCopyDmo/CYLArrayCopyDmo.xcodeproj"> 6 | </FileRef> 7 | </Workspace> 8 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_13题_用@property声明的NSString或NSArray_NSDictionary_经常使用copy关键字_为什么_如果改用strong关键字_可能造成什么问题/CYLMutableArrayCopyDmo/CYLArrayCopyDmo.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/Demo_13题_用@property声明的NSString或NSArray_NSDictionary_经常使用copy关键字_为什么_如果改用strong关键字_可能造成什么问题/CYLMutableArrayCopyDmo/CYLArrayCopyDmo.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_13题_用@property声明的NSString或NSArray_NSDictionary_经常使用copy关键字_为什么_如果改用strong关键字_可能造成什么问题/CYLMutableArrayCopyDmo/CYLArrayCopyDmo.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Bucket 3 | type = "1" 4 | version = "2.0"> 5 | </Bucket> 6 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_13题_用@property声明的NSString或NSArray_NSDictionary_经常使用copy关键字_为什么_如果改用strong关键字_可能造成什么问题/CYLMutableArrayCopyDmo/CYLArrayCopyDmo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CYLMutableArrayCopyDmo 4 | // 5 | // Created by 陈宜龙 on 15/9/25. 6 | // Copyright © 2015年 http://weibo.com/luohanchenyilong/ 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface AppDelegate : UIResponder <UIApplicationDelegate> 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_13题_用@property声明的NSString或NSArray_NSDictionary_经常使用copy关键字_为什么_如果改用strong关键字_可能造成什么问题/CYLMutableArrayCopyDmo/CYLArrayCopyDmo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // CYLMutableArrayCopyDmo 4 | // 5 | // Created by 陈宜龙 on 15/9/25. 6 | // Copyright © 2015年 http://weibo.com/luohanchenyilong/ 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_13题_用@property声明的NSString或NSArray_NSDictionary_经常使用copy关键字_为什么_如果改用strong关键字_可能造成什么问题/CYLMutableArrayCopyDmo/CYLArrayCopyDmo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CYLMutableArrayCopyDmo 4 | // 5 | // Created by 陈宜龙 on 15/9/25. 6 | // Copyright © 2015年 http://weibo.com/luohanchenyilong/ 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "self:/Users/chenyilong/Dropbox/Xcode/Demo/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法.xcodeproj"> 6 | </FileRef> 7 | </Workspace> 8 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key> 6 | <true/> 7 | <key>SnapshotAutomaticallyBeforeSignificantChanges</key> 8 | <true/> 9 | </dict> 10 | </plist> 11 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Bucket 3 | type = "1" 4 | version = "2.0"> 5 | <Breakpoints> 6 | <BreakpointProxy 7 | BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint"> 8 | <BreakpointContent 9 | shouldBeEnabled = "Yes" 10 | ignoreCount = "0" 11 | continueAfterRunningActions = "No" 12 | scope = "0" 13 | stopOnStyle = "0"> 14 | </BreakpointContent> 15 | </BreakpointProxy> 16 | </Breakpoints> 17 | </Bucket> 18 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // nil对象调用点语法 4 | // 5 | // Created by https://github.com/ChenYilong on 15/8/29. 6 | // Copyright (c) 2015年 http://weibo.com/luohanchenyilong/ 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface AppDelegate : UIResponder <UIApplicationDelegate> 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法/ChenPerson.h: -------------------------------------------------------------------------------- 1 | // 2 | // ChenPerson.h 3 | // 4 | // 5 | // Created by https://github.com/ChenYilong on 15/8/30. 6 | // Copyright (c) 2015年 http://weibo.com/luohanchenyilong/ 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import "Person.h" 10 | 11 | @interface ChenPerson : Person 12 | @end 13 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法/Person.h: -------------------------------------------------------------------------------- 1 | // 2 | // Person.h 3 | // nil对象调用点语法 4 | // 5 | // Created by https://github.com/ChenYilong on 15/8/29. 6 | // Copyright (c) 2015年 http://weibo.com/luohanchenyilong/ 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import <Foundation/Foundation.h> 10 | 11 | @interface Person : NSObject 12 | @property (nonatomic, copy) NSString *lastName; 13 | @end 14 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // nil对象调用点语法 4 | // 5 | // Created by https://github.com/ChenYilong on 15/8/29. 6 | // Copyright (c) 2015年 http://weibo.com/luohanchenyilong/ 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // nil对象调用点语法 4 | // 5 | // Created by https://github.com/ChenYilong on 15/8/29. 6 | // Copyright (c) 2015年 http://weibo.com/luohanchenyilong/ 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "Person.h" 11 | #import "ChenPerson.h" 12 | 13 | @interface ViewController () 14 | 15 | @end 16 | 17 | @implementation ViewController 18 | 19 | - (void)viewDidLoad { 20 | [super viewDidLoad]; 21 | 22 | ChenPerson *chen = [[ChenPerson alloc] init]; 23 | } 24 | 25 | @end 26 | 27 | 28 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_21题_下面的代码输出什么/为什么不推荐在init方法中使用点语法/为什么不推荐在init方法中使用点语法/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // nil对象调用点语法 4 | // 5 | // Created by https://github.com/ChenYilong on 15/8/29. 6 | // Copyright (c) 2015年 http://weibo.com/luohanchenyilong/ 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "self:_objc_msgForward_demo.xcodeproj"> 6 | </FileRef> 7 | </Workspace> 8 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>IDEDidComputeMac32BitWarning</key> 6 | <true/> 7 | </dict> 8 | </plist> 9 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key> 6 | <true/> 7 | <key>SnapshotAutomaticallyBeforeSignificantChanges</key> 8 | <true/> 9 | </dict> 10 | </plist> 11 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // _objc_msgForward_demo 4 | // 5 | // Created by http://weibo.com/luohanchenyilong/ (微博@iOS程序犭袁)on 15/9/10. 6 | // Copyright (c) 2015年 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface AppDelegate : UIResponder <UIApplicationDelegate> 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo/Father.h: -------------------------------------------------------------------------------- 1 | // 2 | // Father.h 3 | // Runtime 4 | // 5 | // Created by http://weibo.com/luohanchenyilong/(微博@iOS程序犭袁)on 15/9/9. 6 | // Copyright © 2015年 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import <Foundation/Foundation.h> 10 | 11 | @interface Father : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo/Father.m: -------------------------------------------------------------------------------- 1 | // 2 | // Father.m 3 | // Runtime 4 | // 5 | // Created by http://weibo.com/luohanchenyilong/(微博@iOS程序犭袁)on 15/9/9. 6 | // Copyright © 2015年 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import "Father.h" 10 | 11 | @implementation Father 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo/ForwardingTarge.h: -------------------------------------------------------------------------------- 1 | // 2 | // ForwardingTarge.h 3 | // Runtime 4 | // 5 | // Created by http://weibo.com/luohanchenyilong/(微博@iOS程序犭袁)on 15/9/9. 6 | // Copyright © 2015年 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import <Foundation/Foundation.h> 10 | 11 | @interface ForwardingTarge : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo/Son.h: -------------------------------------------------------------------------------- 1 | // 2 | // Son.h 3 | // Runtime 4 | // 5 | // Created by http://weibo.com/luohanchenyilong/(微博@iOS程序犭袁)on 15/9/9. 6 | // Copyright © 2015年 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import "Father.h" 10 | 11 | @interface Son : Father 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // _objc_msgForward_demo 4 | // 5 | // Created by http://weibo.com/luohanchenyilong/ (微博@iOS程序犭袁)on 15/9/10. 6 | // Copyright (c) 2015年 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_25题__objc_msgForward函数是做什么的_直接调用它将会发生什么/_objc_msgForward_demo/_objc_msgForward_demo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // _objc_msgForward_demo 4 | // 5 | // Created by http://weibo.com/luohanchenyilong/ (微博@iOS程序犭袁)on 15/9/10. 6 | // Copyright (c) 2015年 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "self:Demo_38_block_edit_var.xcodeproj"> 6 | </FileRef> 7 | </Workspace> 8 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>IDEDidComputeMac32BitWarning</key> 6 | <true/> 7 | </dict> 8 | </plist> 9 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>SchemeUserState</key> 6 | <dict> 7 | <key>Demo_38_block_edit_var.xcscheme_^#shared#^_</key> 8 | <dict> 9 | <key>orderHint</key> 10 | <integer>0</integer> 11 | </dict> 12 | </dict> 13 | </dict> 14 | </plist> 15 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // Demo_38_block_edit_var 4 | // 5 | // Created by chenyilong on 2020/6/3. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface AppDelegate : UIResponder <UIApplicationDelegate> 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var/SceneDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.h 3 | // Demo_38_block_edit_var 4 | // 5 | // Created by chenyilong on 2020/6/3. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface SceneDelegate : UIResponder <UIWindowSceneDelegate> 12 | 13 | @property (strong, nonatomic) UIWindow * window; 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // Demo_38_block_edit_var 4 | // 5 | // Created by chenyilong on 2020/6/3. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var/main-in-cpp.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var/main-in-cpp.zip -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_38_block_edit_var/Demo_38_block_edit_var/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Demo_38_block_edit_var 4 | // 5 | // Created by chenyilong on 2020/6/3. 6 | // Copyright © 2020 ChenYilong. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "AppDelegate.h" 11 | typedef void (^CYLBlock)(void); 12 | int age = 10; 13 | int main(int argc, char * argv[]) { 14 | NSString * appDelegateClassName; 15 | @autoreleasepool { 16 | appDelegateClassName = NSStringFromClass([AppDelegate class]); 17 | CYLBlock block = ^{ 18 | age = 20; 19 | NSLog(@"age is %@", @(age)); 20 | }; 21 | block(); 22 | } 23 | return UIApplicationMain(argc, argv, nil, appDelegateClassName); 24 | } 25 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_46题与51题_KVO原理_如何手动触发一个value的KVO/KVO实现原理.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "self:KVO实现原理.xcodeproj"> 6 | </FileRef> 7 | </Workspace> 8 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_46题与51题_KVO原理_如何手动触发一个value的KVO/KVO实现原理.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/Demo_46题与51题_KVO原理_如何手动触发一个value的KVO/KVO实现原理.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_46题与51题_KVO原理_如何手动触发一个value的KVO/KVO实现原理.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Bucket 3 | type = "1" 4 | version = "2.0"> 5 | </Bucket> 6 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_46题与51题_KVO原理_如何手动触发一个value的KVO/KVO实现原理.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>SchemeUserState</key> 6 | <dict> 7 | <key>KVO实现原理.xcscheme</key> 8 | <dict> 9 | <key>orderHint</key> 10 | <integer>0</integer> 11 | </dict> 12 | </dict> 13 | <key>SuppressBuildableAutocreation</key> 14 | <dict> 15 | <key>9A1530431CB4E4C900EF35B5</key> 16 | <dict> 17 | <key>primary</key> 18 | <true/> 19 | </dict> 20 | </dict> 21 | </dict> 22 | </plist> 23 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_46题与51题_KVO原理_如何手动触发一个value的KVO/KVO实现原理/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // KVO实现原理 4 | // 5 | // Created by 陈宜龙 on 16/4/6. 6 | // Copyright © 2016年 ElonChan. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface AppDelegate : UIResponder <UIApplicationDelegate> 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_46题与51题_KVO原理_如何手动触发一个value的KVO/KVO实现原理/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // KVO实现原理 4 | // 5 | // Created by 陈宜龙 on 16/4/6. 6 | // Copyright © 2016年 ElonChan. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/Demo_46题与51题_KVO原理_如何手动触发一个value的KVO/KVO实现原理/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // KVO实现原理 4 | // 5 | // Created by 陈宜龙 on 16/4/6. 6 | // Copyright © 2016年 ElonChan. All rights reserved. 7 | // 8 | 9 | #import <UIKit/UIKit.h> 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/assets/16909544760924.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/assets/16909544760924.jpg -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/assets/54_How to_debug_the_BAD_ACCESS_error.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/assets/54_How to_debug_the_BAD_ACCESS_error.jpg -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/assets/54_How to_debug_the_BAD_ACCESS_error_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/assets/54_How to_debug_the_BAD_ACCESS_error_01.jpg -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/assets/54_How to_debug_the_BAD_ACCESS_error_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/assets/54_How to_debug_the_BAD_ACCESS_error_02.jpg -------------------------------------------------------------------------------- /01《招聘一个靠谱的iOS》面试题参考答案/assets/Screen Shot 2023-08-02 at 20.15.47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/01《招聘一个靠谱的iOS》面试题参考答案/assets/Screen Shot 2023-08-02 at 20.15.47.png -------------------------------------------------------------------------------- /02_Swift_interview_questions/README.md: -------------------------------------------------------------------------------- 1 | ## iOS面试题集锦(附答案)(Swift 版本) 2 | 3 | <p align="center"><a href="https://github.com/ChenYilong/iOSInterviewQuestions/blob/master/02_Swift_interview_questions/theory.md"><img src="../assets/Swift_theory_Interview_Questions.jpg"></a></p> 4 | 5 | - [《理论篇: Swift/ObjC 语言基础》](https://github.com/ChenYilong/iOSInterviewQuestions/blob/master/02_Swift_interview_questions/theory.md) 6 | 7 | 8 | <p align="center"><a href="https://github.com/ChenYilong/iOSInterviewQuestions/blob/master/02_Swift_interview_questions/practical.md"><img src="../assets/Swift_practical_Interview_Questions.jpg"></a></p> 9 | 10 | 11 | 12 | - [《实战篇: iOS项目开发技能》]( https://github.com/ChenYilong/iOSInterviewQuestions/blob/master/02_Swift_interview_questions/practical.md ) 13 | -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/1-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/1-1.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/1-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/1-2.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/1-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/1-3.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/1-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/1-4.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/1.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/1.png -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/10.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/11.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/16912874108037.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/16912874108037.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/16912874480991.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/16912874480991.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/16912874813432.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/16912874813432.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/16912875027729.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/16912875027729.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/16913169429010.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/16913169429010.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/16914714232134.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/16914714232134.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/16918516162699.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/16918516162699.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/16919848599418.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/16919848599418.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/16919852605513.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/16919852605513.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/2-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/2-1.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/2-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/2-2.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/2.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/2.png -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/3-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/3-1.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/3-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/3-2.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/3.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/3.png -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/4-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/4-1.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/4-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/4-2.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/4.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/4.png -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/5-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/5-1.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/5-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/5-2.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/5.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/5.png -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/6-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/6-1.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/6.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/6.png -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/7-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/7-1.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/7.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/7.png -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/8.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/8.PNG -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/8.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/9.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/9.png -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/reactive_programming_qa/cn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/reactive_programming_qa/cn.jpg -------------------------------------------------------------------------------- /02_Swift_interview_questions/assets/reactive_programming_qa/en.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/02_Swift_interview_questions/assets/reactive_programming_qa/en.jpg -------------------------------------------------------------------------------- /Behavioral_based_interviewing_Competency_Based/assets/4-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Behavioral_based_interviewing_Competency_Based/assets/4-1.jpg -------------------------------------------------------------------------------- /Behavioral_based_interviewing_Competency_Based/assets/5-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Behavioral_based_interviewing_Competency_Based/assets/5-1.jpg -------------------------------------------------------------------------------- /Behavioral_based_interviewing_Competency_Based/assets/6-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Behavioral_based_interviewing_Competency_Based/assets/6-1.jpg -------------------------------------------------------------------------------- /Behavioral_based_interviewing_Competency_Based/assets/7-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Behavioral_based_interviewing_Competency_Based/assets/7-1.jpg -------------------------------------------------------------------------------- /Behavioral_based_interviewing_Competency_Based/assets/behavioral-question.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Behavioral_based_interviewing_Competency_Based/assets/behavioral-question.jpg -------------------------------------------------------------------------------- /Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/%E6%9E%B6%E6%9E%84%E5%9B%BE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/%E6%9E%B6%E6%9E%84%E5%9B%BE.png -------------------------------------------------------------------------------- /Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/HungryAppArchitecture.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/HungryAppArchitecture.graffle -------------------------------------------------------------------------------- /Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled 1.png -------------------------------------------------------------------------------- /Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled 2.png -------------------------------------------------------------------------------- /Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled 3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled 3.png -------------------------------------------------------------------------------- /Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled 4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled 4.png -------------------------------------------------------------------------------- /Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled.jpeg -------------------------------------------------------------------------------- /Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/Untitled.png -------------------------------------------------------------------------------- /Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/catch_work_%E5%9F%BA%E6%9C%AC%E6%B5%81%E7%A8%8B%E5%9B%BE_(2).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/catch_work_%E5%9F%BA%E6%9C%AC%E6%B5%81%E7%A8%8B%E5%9B%BE_(2).png -------------------------------------------------------------------------------- /Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/“Hungry Hippo” iOS Application .xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Other/TechnicalDesignDocumentDemo/Hungry Hippo app Technical Design Docs 50ebd0e21e7441d189bf648d1591f952/“Hungry Hippo” iOS Application .xmind -------------------------------------------------------------------------------- /Swift/AnniversaryCalculator/AnniversaryCalculator.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/AnniversaryCalculator/AnniversaryCalculator.xmind -------------------------------------------------------------------------------- /Swift/AnniversaryCalculator/AnniversaryCalculatorDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "self:"> 6 | </FileRef> 7 | </Workspace> 8 | -------------------------------------------------------------------------------- /Swift/AnniversaryCalculator/AnniversaryCalculatorDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>IDEDidComputeMac32BitWarning</key> 6 | <true/> 7 | </dict> 8 | </plist> 9 | -------------------------------------------------------------------------------- /Swift/AnniversaryCalculator/AnniversaryCalculatorDemo.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>SchemeUserState</key> 6 | <dict> 7 | <key>AnniversaryCalculatorDemo.xcscheme_^#shared#^_</key> 8 | <dict> 9 | <key>orderHint</key> 10 | <integer>0</integer> 11 | </dict> 12 | </dict> 13 | </dict> 14 | </plist> 15 | -------------------------------------------------------------------------------- /Swift/AnniversaryCalculator/AnniversaryCalculatorDemo/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 | -------------------------------------------------------------------------------- /Swift/AnniversaryCalculator/AnniversaryCalculatorDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Swift/AnniversaryCalculator/AnniversaryCalculatorDemo/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // AnniversaryCalculatorDemo 4 | // 5 | // Created by chenyilong on 2022/8/15. 6 | // 7 | 8 | import UIKit 9 | 10 | class ViewController: UIViewController { 11 | let viewModel: ViewModel = .init() 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view. 16 | 17 | for couple in viewModel.couples { 18 | if couple.shouldAnniversaryToRemind() { 19 | viewModel.couplesToRemind.append(couple) 20 | } 21 | } 22 | print(viewModel.couplesToRemind) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Swift/AnniversaryCalculator/Architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/AnniversaryCalculator/Architecture.png -------------------------------------------------------------------------------- /Swift/MVVMDemo/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/MVVMDemo/banner.png -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "self:"> 6 | </FileRef> 7 | </Workspace> 8 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>IDEDidComputeMac32BitWarning</key> 6 | <true/> 7 | </dict> 8 | </plist> 9 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/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 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/Assets.xcassets/refreshControlBgColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "platform" : "universal", 6 | "reference" : "systemGrayColor" 7 | }, 8 | "idiom" : "universal" 9 | } 10 | ], 11 | "info" : { 12 | "author" : "xcode", 13 | "version" : 1 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/Assets.xcassets/userIconPlaceholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "userIconPlaceholder.jpg", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/Assets.xcassets/userIconPlaceholder.imageset/userIconPlaceholder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/MVVMDemo/iOSTest/Assets.xcassets/userIconPlaceholder.imageset/userIconPlaceholder.jpg -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/Helpers/UIColor+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+Extension.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIColor { 11 | static let themeColor = UIColor(named: "ThemeColor") 12 | static let alertColor = UIColor(named: "AlertColor") 13 | static let refreshControlBgColor = UIColor(named: "RefreshControlBgColor") 14 | } 15 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/Info.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>UIApplicationSceneManifest</key> 6 | <dict> 7 | <key>UIApplicationSupportsMultipleScenes</key> 8 | <false/> 9 | <key>UISceneConfigurations</key> 10 | <dict> 11 | <key>UIWindowSceneSessionRoleApplication</key> 12 | <array> 13 | <dict> 14 | <key>UISceneConfigurationName</key> 15 | <string>Default Configuration</string> 16 | <key>UISceneDelegateClassName</key> 17 | <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string> 18 | </dict> 19 | </array> 20 | </dict> 21 | </dict> 22 | </dict> 23 | </plist> 24 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/Model/Entity/Comment.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Post.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Comment: Codable, Identifiable { 11 | let postId: Int 12 | let id: Int 13 | let name: String 14 | let body: String 15 | let email: String 16 | } 17 | 18 | extension Comment: ContentModel { 19 | var title: String { 20 | return name // we'll use 'name' as 'title' for Comment 21 | } 22 | // no additional implementation needed 23 | } 24 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/Model/Entity/ContentModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentModel.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/4. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol ContentModel { 11 | var id: Int { get } 12 | var body: String { get } 13 | var title: String { get } 14 | } 15 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/Model/Entity/Post.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Post.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Post: Codable, Identifiable { 11 | let id: Int 12 | let userId: Int 13 | let title: String 14 | let body: String 15 | } 16 | 17 | extension Post: ContentModel { 18 | // no additional implementation needed, as Post already conforms to ContentModel 19 | } 20 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/View/BaseCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseCell.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/25. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | class BaseCell: UITableViewCell, ClassIdenfifiable { 12 | override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { 13 | super.init(style: style, reuseIdentifier: reuseIdentifier) 14 | } 15 | 16 | required init?(coder: NSCoder) { 17 | fatalError("init(coder:) has not been implemented") 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/View/ClassIdenfifiable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ClassIdenfifiable.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol ClassIdenfifiable { 11 | static var reuseIdentifier: String { get } 12 | } 13 | 14 | extension ClassIdenfifiable { 15 | static var reuseIdentifier: String { 16 | return String(describing: self) 17 | } 18 | } 19 | 20 | 21 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/View/CommentDetailViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PostDetailViewController.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | 9 | import UIKit 10 | 11 | final class CommentDetailViewController: BaseContentDetailViewController<Comment> { 12 | // No need for init, viewDidLoad, setupView since they are inherited. 13 | } 14 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/ViewModel/CommentCellViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommentCellViewModel.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import Foundation 9 | 10 | final class CommentCellViewModel: ContentCellViewModelProtocol { 11 | typealias Content = Comment 12 | 13 | var cellPressed: (() -> Void)? 14 | 15 | var content: Content 16 | 17 | init(content: Content) { 18 | self.content = content 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/ViewModel/ContentCellViewModelProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentCellViewModelProtocol.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/4. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol ContentCellViewModelProtocol: ViewModelClickable { 11 | associatedtype Content 12 | var content: Content { get set } 13 | init(content: Content) 14 | } 15 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/ViewModel/PostCellViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PostCellViewModel.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import Foundation 9 | 10 | final class PostCellViewModel: ContentCellViewModelProtocol { 11 | var cellPressed: (() -> Void)? 12 | var content: Post 13 | 14 | init(content: Post) { 15 | self.content = content 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTest/ViewModel/RowViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RowViewModel.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import Foundation 9 | 10 | /// Conform this protocol to handles user press action 11 | protocol ViewModelClickable { 12 | var cellPressed: (()->Void)? { get set } 13 | } 14 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTestTests/emptyData.json: -------------------------------------------------------------------------------- 1 | [ 2 | ] 3 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTestTests/errorData.json: -------------------------------------------------------------------------------- 1 | error json data 2 | -------------------------------------------------------------------------------- /Swift/MVVMDemo/iOSTestTests/nilData.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/MVVMDemo/iOSTestTests/nilData.json -------------------------------------------------------------------------------- /Swift/MVVMDemo/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/MVVMDemo/preview.gif -------------------------------------------------------------------------------- /Swift/MVVMTest/iOSTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "self:"> 6 | </FileRef> 7 | </Workspace> 8 | -------------------------------------------------------------------------------- /Swift/MVVMTest/iOSTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>IDEDidComputeMac32BitWarning</key> 6 | <true/> 7 | </dict> 8 | </plist> 9 | -------------------------------------------------------------------------------- /Swift/MVVMTest/iOSTest.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>SchemeUserState</key> 6 | <dict> 7 | <key>iOSTest.xcscheme_^#shared#^_</key> 8 | <dict> 9 | <key>orderHint</key> 10 | <integer>0</integer> 11 | </dict> 12 | </dict> 13 | </dict> 14 | </plist> 15 | -------------------------------------------------------------------------------- /Swift/MVVMTest/iOSTest/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 | -------------------------------------------------------------------------------- /Swift/MVVMTest/iOSTest/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Swift/MVVMTest/iOSTest/OrderCellViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OrderCellViewModel.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/12. 6 | // 7 | 8 | class OrderCellViewModel: RowViewModel, ViewModelClickable { 9 | var cellPressed: (() -> Void)? 10 | var product: Product 11 | init(product: Product) { 12 | self.product = product 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Swift/MVVMTest/iOSTest/Product.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Product.swift 3 | // iOSTest 4 | // 5 | // Created by ChenYilong on 10/11/21. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Product { 11 | let productCode: Int 12 | let description: String 13 | let brand: String 14 | let price: Double 15 | let quantity: Double 16 | } 17 | -------------------------------------------------------------------------------- /Swift/MVVMTest/iOSTest/RowViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RowViewModel.swift 3 | // iOSTest 4 | // 5 | // Created by ChenYilong on 10/11/21. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol RowViewModel {} 11 | 12 | /// Conform this protocol to handles user press action 13 | protocol ViewModelClickable { 14 | var cellPressed: (() -> Void)? { get set } 15 | } 16 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Interactor.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Interactor.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Interactor.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Interactor.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Models.xctemplate/Swift/___FILEBASENAME___Models.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | import UIKit 14 | 15 | enum ___VARIABLE_sceneName___ 16 | { 17 | // MARK: Use cases 18 | 19 | enum Something 20 | { 21 | struct Request 22 | { 23 | } 24 | struct Response 25 | { 26 | } 27 | struct ViewModel 28 | { 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Models.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Models.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Models.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Models.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Presenter.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Presenter.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Presenter.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Presenter.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Router.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Router.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Router.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Router.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/UICollectionViewControllerObjective-C/___FILEBASENAME___Worker.h: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | #import <UIKit/UIKit.h> 14 | 15 | @interface ___VARIABLE_sceneName___Worker: NSObject 16 | - (void)doSomeWork; 17 | @end 18 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/UICollectionViewControllerObjective-C/___FILEBASENAME___Worker.m: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | #import "___VARIABLE_sceneName___Worker.h" 14 | 15 | @interface ___VARIABLE_sceneName___Worker () 16 | @end 17 | 18 | @implementation ___VARIABLE_sceneName___Worker 19 | 20 | - (void)doSomeWork 21 | { 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/UICollectionViewControllerSwift/___FILEBASENAME___Worker.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | import UIKit 14 | 15 | class ___VARIABLE_sceneName___Worker 16 | { 17 | func doSomeWork() 18 | { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/UITableViewControllerObjective-C/___FILEBASENAME___Worker.h: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | #import <UIKit/UIKit.h> 14 | 15 | @interface ___VARIABLE_sceneName___Worker: NSObject 16 | - (void)doSomeWork; 17 | @end 18 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/UITableViewControllerObjective-C/___FILEBASENAME___Worker.m: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | #import "___VARIABLE_sceneName___Worker.h" 14 | 15 | @interface ___VARIABLE_sceneName___Worker () 16 | @end 17 | 18 | @implementation ___VARIABLE_sceneName___Worker 19 | 20 | - (void)doSomeWork 21 | { 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/UITableViewControllerSwift/___FILEBASENAME___Worker.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | import UIKit 14 | 15 | class ___VARIABLE_sceneName___Worker 16 | { 17 | func doSomeWork() 18 | { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/UIViewControllerObjective-C/___FILEBASENAME___Worker.h: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | #import <UIKit/UIKit.h> 14 | 15 | @interface ___VARIABLE_sceneName___Worker: NSObject 16 | - (void)doSomeWork; 17 | @end 18 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/UIViewControllerObjective-C/___FILEBASENAME___Worker.m: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | #import "___VARIABLE_sceneName___Worker.h" 14 | 15 | @interface ___VARIABLE_sceneName___Worker () 16 | @end 17 | 18 | @implementation ___VARIABLE_sceneName___Worker 19 | 20 | - (void)doSomeWork 21 | { 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/UIViewControllerSwift/___FILEBASENAME___Models.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | import UIKit 14 | 15 | enum ___VARIABLE_sceneName___ 16 | { 17 | // MARK: Use cases 18 | 19 | enum Something 20 | { 21 | struct Request 22 | { 23 | } 24 | struct Response 25 | { 26 | } 27 | struct ViewModel 28 | { 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Scene.xctemplate/UIViewControllerSwift/___FILEBASENAME___Worker.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | import UIKit 14 | 15 | class ___VARIABLE_sceneName___Worker 16 | { 17 | func doSomeWork() 18 | { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Unit Tests.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Unit Tests.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Unit Tests.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Unit Tests.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/View Controller.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/View Controller.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/View Controller.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/View Controller.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Worker.xctemplate/Objective-C/___FILEBASENAME___Worker.h: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | #import <UIKit/UIKit.h> 14 | 15 | @interface ___VARIABLE_sceneName___Worker: NSObject 16 | - (void)doSomeWork; 17 | @end 18 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Worker.xctemplate/Objective-C/___FILEBASENAME___Worker.m: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | #import "___VARIABLE_sceneName___Worker.h" 14 | 15 | @interface ___VARIABLE_sceneName___Worker () 16 | @end 17 | 18 | @implementation ___VARIABLE_sceneName___Worker 19 | 20 | - (void)doSomeWork 21 | { 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Worker.xctemplate/Swift/___FILEBASENAME___Worker.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ___FILENAME___ 3 | // ___PROJECTNAME___ 4 | // 5 | // Created by ___FULLUSERNAME___ on ___DATE___. 6 | // Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved. 7 | // 8 | // This file was generated by the Clean Swift Xcode Templates so 9 | // you can apply clean architecture to your iOS and Mac projects, 10 | // see http://clean-swift.com 11 | // 12 | 13 | import UIKit 14 | 15 | class ___VARIABLE_sceneName___Worker 16 | { 17 | func doSomeWork() 18 | { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Worker.xctemplate/TemplateIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Worker.xctemplate/TemplateIcon.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Clean Swift/Worker.xctemplate/TemplateIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CleanSwiftObjC/Clean Swift/Worker.xctemplate/TemplateIcon@2x.png -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/Makefile: -------------------------------------------------------------------------------- 1 | XCODE_USER_TEMPLATES_DIR=~/Library/Developer/Xcode/Templates/File\ Templates 2 | XCODE_USER_SNIPPETS_DIR=~/Library/Developer/Xcode/UserData/CodeSnippets 3 | 4 | TEMPLATES_DIR=Clean\ Swift 5 | 6 | install_templates: 7 | mkdir -p $(XCODE_USER_TEMPLATES_DIR) 8 | rm -fR $(XCODE_USER_TEMPLATES_DIR)/$(TEMPLATES_DIR) 9 | cp -R $(TEMPLATES_DIR) $(XCODE_USER_TEMPLATES_DIR) 10 | 11 | uninstall_templates: 12 | rm -fR $(XCODE_USER_TEMPLATES_DIR)/$(TEMPLATES_DIR) 13 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/README.md: -------------------------------------------------------------------------------- 1 | To learn more about Clean Swift and the VIP cycle, read: 2 | 3 | http://clean-swift.com/clean-swift-ios-architecture 4 | 5 | There is a sample app available at: 6 | 7 | https://github.com/Clean-Swift/CleanStore 8 | 9 | To install the Clean Swift Xcode templates, run: 10 | 11 | > make install_templates 12 | 13 | To uninstall the Clean Swift Xcode templates, run: 14 | 15 | > make uninstall_templates 16 | -------------------------------------------------------------------------------- /Swift/Other/CleanSwiftObjC/VERSION: -------------------------------------------------------------------------------- 1 | 3.0.2 -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/CachableAsyncImage/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | xcuserdata/ 6 | DerivedData/ 7 | .swiftpm/config/registries.json 8 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata 9 | .netrc 10 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/CachableAsyncImage/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>IDEDidComputeMac32BitWarning</key> 6 | <true/> 7 | </dict> 8 | </plist> 9 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/CachableAsyncImage/README.md: -------------------------------------------------------------------------------- 1 | # CachableAsyncImage 2 | 3 | CachableAsyncImage is a SwiftUI View which can async load images and support cache. 4 | 5 | You can declare an AsyncImage and pass URL and placeholder into it. When the image appears, ImageLoader will download the image. During the loading, the placeholder will be shown. Once the image is successfully downloaded, it will be stored in NSCache by NSURL-UIImage pair. Meanwhile, the image will display. If during the loading the image disappears, the loader will cancel the task of download. 6 | When the second time to load the image by the same URL, the image will be read in the cache and directly shown. -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/CachableAsyncImage/Sources/CachableAsyncImage/PlaceholderImageView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlaceholderImageView.swift 3 | // 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import SwiftUI 9 | 10 | public struct PlaceholderImageView: View { 11 | 12 | public init() {} 13 | 14 | public var body: some View { 15 | Image(systemName: "photo.fill") 16 | .resizable() 17 | .foregroundColor(.blue) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/CachableAsyncImage/Tests/CachableAsyncImageTests/CachableAsyncImageTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import CachableAsyncImage 3 | 4 | final class CachableAsyncImageTests: XCTestCase {} 5 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/NetworkingProvider/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | xcuserdata/ 6 | DerivedData/ 7 | .swiftpm/config/registries.json 8 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata 9 | .netrc 10 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/NetworkingProvider/.swiftpm/xcode/package.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>IDEDidComputeMac32BitWarning</key> 6 | <true/> 7 | </dict> 8 | </plist> 9 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/NetworkingProvider/README.md: -------------------------------------------------------------------------------- 1 | # NetworkingProvider 2 | 3 | NetworkingProvider provides basic network services. 4 | 5 | ### NetworkEnviroment 6 | Defined Http header keys, methods and mimeType. 7 | 8 | ### NetworkService 9 | A protocol helps define a request with the necessary elements. 10 | 11 | ### NetworkProviderProtocol 12 | A protocol for network clients. 13 | 14 | ### RequestError 15 | Defined some network errors. 16 | 17 | ### Session 18 | Customised URLSession that can decode data by specific type and throw RequestErrors. 19 | 20 | ### SessionProtocol 21 | A protocol for sessions. -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/NetworkingProvider/Sources/NetworkingProvider/NetworkingProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NetworkingProvider.swift 3 | // A protocol for network clients. 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | public protocol NetworkProviderProtocol { 11 | 12 | var urlSession: SessionProtocol { get } 13 | var service: NetworkService { get } 14 | 15 | func request<T>(dataType: T.Type) async throws -> T where T: Decodable 16 | } 17 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/NetworkingProvider/Tests/NetworkingProviderTests/NetworkingProviderTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import NetworkingProvider 3 | 4 | final class NetworkingProviderTests: XCTestCase {} 5 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Adaptors/UserDetailAdaptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDetailAdaptor.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | struct UserDetailAdaptor { 11 | 12 | static func convent(userInfo: UserInfo) -> UserDetailModel { 13 | UserDetailModel( 14 | userName: userInfo.login, 15 | avatarURL: userInfo.avatar_url, 16 | publicRepositoryCount: userInfo.public_repos, 17 | followersCount: userInfo.followers, 18 | followingCount: userInfo.following 19 | ) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/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 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "1024.png", 5 | "idiom" : "universal", 6 | "platform" : "ios", 7 | "size" : "1024x1024" 8 | } 9 | ], 10 | "info" : { 11 | "author" : "xcode", 12 | "version" : 1 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Define/ErrorDefine.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ErrorDefine.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | enum MockError: Error { 11 | case FailedToLoadJson 12 | } 13 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Define/ImageName.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageName.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | struct ImageName { 11 | static let xMark = "xmark.circle.fill" 12 | static let arrowDown = "arrow.down.square" 13 | static let arrowUp = "arrow.up.square" 14 | static let arrowClockwise = "arrow.clockwise" 15 | } 16 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Models/UserDetailModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDetailModel.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | struct UserDetailModel: Equatable { 11 | let userName: String 12 | let avatarURL: String 13 | let publicRepositoryCount: Int 14 | let followersCount: Int 15 | let followingCount: Int 16 | } 17 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Repositories/CommonNetworkDefine.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommonClient.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | enum CommonNetworkDefine { 11 | static var baseURL: String { 12 | "https://api.github.com" 13 | } 14 | 15 | static var itemAmountPerPage: Int { 16 | 30 17 | } 18 | 19 | static var defaultTimeOut: TimeInterval { 20 | 30 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Repositories/SearchListRepository/SearchListRepoProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SearchListRepoProtocol.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol SearchListRepoProtocol: Repository { 11 | func searchUsers(by searchedInfo: SearchedUserModel) async throws -> SearchedUsersResult 12 | } 13 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Repositories/SearchListRepository/SearchListRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SearchListRepository.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | struct SearchListRepository: SearchListRepoProtocol { 11 | func searchUsers(by searchedInfo: SearchedUserModel) async throws -> SearchedUsersResult { 12 | let client = ServiceClient(clientService: SearchUserNetworkService(searchedUser: searchedInfo)) 13 | return try await client.request(dataType: SearchedUsersResult.self) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Repositories/UserDetailRepository/UserDetailRepoProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDetailRepoProtocol.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/8. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol UserDetailRepoProtocol: Repository { 11 | func loadUserDetail(by userName: String) async throws -> UserInfo 12 | } 13 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/Repositories/UserDetailRepository/UserDetailRepository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDetailRepository.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/8. 6 | // 7 | 8 | import Foundation 9 | 10 | struct UserDetailRepository: UserDetailRepoProtocol { 11 | 12 | func loadUserDetail(by userName: String) async throws -> UserInfo { 13 | let client = ServiceClient(clientService: UserDetailNetworkService(userName: userName)) 14 | return try await client.request(dataType: UserInfo.self) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/SearchList/SearchListService/SearchListService+Dependencies.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SearchListService+Dependencies.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Dependencies 9 | 10 | extension DependencyValues { 11 | 12 | var searchListService: SearchListService { 13 | get { self[SearchListService.self] } 14 | set { self[SearchListService.self] = newValue } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/SearchList/SearchListService/SearchListService+Live.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SearchListService+Live.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | extension SearchListService { 11 | 12 | static func liveValue(context: Context) -> Self { 13 | Self ( 14 | searchUserName: { userInfo in 15 | let repo = context[SearchListRepoProtocol.self] 16 | let result = try await repo.searchUsers(by: userInfo) 17 | return SearchResultAdaptor.convertSearchResult(result: result) 18 | } 19 | ) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/SearchList/SearchListService/SearchListService.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SearchListService.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | struct SearchListService { 11 | 12 | var searchUserName: @Sendable (SearchedUserModel) async throws -> SearchedResultModel 13 | } 14 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/UserDetail/UserDetailService/UserDetailService+Dependencies.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDetailService+Dependencies.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Dependencies 9 | 10 | extension DependencyValues { 11 | 12 | var userDetailService: UserDetailService { 13 | get { self[UserDetailService.self] } 14 | set { self[UserDetailService.self] = newValue } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/UserDetail/UserDetailService/UserDetailService+Live.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDetailService+Live.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/8. 6 | // 7 | 8 | import Foundation 9 | 10 | extension UserDetailService { 11 | 12 | static func liveValue(context: Context) -> Self { 13 | Self ( 14 | loadUserDetail: { userName in 15 | let repo = context[UserDetailRepoProtocol.self] 16 | let userInfo = try await repo.loadUserDetail(by: userName) 17 | return UserDetailAdaptor.convent(userInfo: userInfo) 18 | } 19 | ) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/WeltCodingChallenge/WeltCodingChallenge/UserDetail/UserDetailService/UserDetailService.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDetailService.swift 3 | // WeltCodingChallenge 4 | // 5 | // Created by Jacklandrin on 2023/8/7. 6 | // 7 | 8 | import Foundation 9 | 10 | struct UserDetailService { 11 | var loadUserDetail: @Sendable (String) async throws -> UserDetailModel 12 | } 13 | -------------------------------------------------------------------------------- /Swift/Other/CodingChallenge/iOS_CodingChallenge.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/Swift/Other/CodingChallenge/iOS_CodingChallenge.pdf -------------------------------------------------------------------------------- /Swift/Swift101/Swift101/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 | -------------------------------------------------------------------------------- /Swift/Swift101/Swift101/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Swift/Swift101/Swift101/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Swift/Swift101/Swift101/BaseCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseCell.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/25. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | class BaseCell: UITableViewCell { 12 | override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { 13 | super.init(style: style, reuseIdentifier: reuseIdentifier) 14 | } 15 | 16 | required init?(coder: NSCoder) { 17 | fatalError("init(coder:) has not been implemented") 18 | } 19 | } 20 | 21 | extension BaseCell: ClassIdenfifiable { 22 | static var reuseIdentifier: String { 23 | return "default" 24 | } 25 | 26 | static var reuseIdentifier2: String { 27 | return "B" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Swift/Swift101/Swift101/ClassIdenfifiable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ClassIdenfifiable.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/25. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol ClassIdenfifiable { 11 | static var reuseIdentifier: String { get } 12 | } 13 | 14 | extension ClassIdenfifiable { 15 | static var reuseIdentifier: String { 16 | return String(describing: self) 17 | } 18 | //不在 Protocol requirements 中声明 19 | static var reuseIdentifier2: String { 20 | return "A" 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI101/README.md: -------------------------------------------------------------------------------- 1 | ## iOS Programming Challenge: SwiftUI 101 2 | 3 | 4 | ## Result from Yilong Chen 5 |  6 | 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI101/SwiftUI101/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 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI101/SwiftUI101/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI101/SwiftUI101/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI101/SwiftUI101/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI101/SwiftUI101/SwiftUI101App.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftUI101App.swift 3 | // SwiftUI101 4 | // 5 | // Created by chenyilong on 2023/8/1. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct MyApp: App { 12 | 13 | var body: some Scene { 14 | WindowGroup { 15 | ContentView() 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI101/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/SwiftUI/SwiftUI101/preview.gif -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/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 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/Helpers/UIColor+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+Extension.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIColor { 11 | static let themeColor = UIColor(named: "ThemeColor") 12 | static let alertColor = UIColor(named: "AlertColor") 13 | static let refreshControlBgColor = UIColor(named: "RefreshControlBgColor") 14 | } 15 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/Model/Comment.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Post.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Comment: Codable, Identifiable { 11 | let postId: Int 12 | let id: Int 13 | let name: String 14 | let body: String 15 | let email: String 16 | } 17 | 18 | extension Comment: ContentModel { 19 | var title: String { 20 | return name // we'll use 'name' as 'title' for Comment 21 | } 22 | // no additional implementation needed 23 | } 24 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/Model/ContentModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentModel.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/4. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol ContentModel { 11 | var id: Int { get } 12 | var body: String { get } 13 | var title: String { get } 14 | } 15 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/Model/Post.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Post.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Post: Codable, Identifiable { 11 | let id: Int 12 | let userId: Int 13 | let title: String 14 | let body: String 15 | } 16 | 17 | extension Post: ContentModel { 18 | // no additional implementation needed, as Post already conforms to ContentModel 19 | } 20 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/SwiftUIDemoApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftUIDemoApp.swift 3 | // SwiftUIDemo 4 | // 5 | // Created by chenyilong on 2023/7/17. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct SwiftUIDemoApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/ViewModel/CommentCellViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommentCellViewModel.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import Foundation 9 | 10 | final class CommentCellViewModel: ContentCellViewModelProtocol { 11 | typealias Content = Comment 12 | 13 | var cellPressed: (() -> Void)? 14 | 15 | var content: Content 16 | 17 | init(content: Content) { 18 | self.content = content 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/ViewModel/ContentCellViewModelProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentCellViewModelProtocol.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/4. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol ContentCellViewModelProtocol: ViewModelClickable { 11 | associatedtype Content 12 | var content: Content { get set } 13 | init(content: Content) 14 | } 15 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/ViewModel/PostCellViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PostCellViewModel.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import Foundation 9 | 10 | final class PostCellViewModel: ContentCellViewModelProtocol { 11 | var cellPressed: (() -> Void)? 12 | var content: Post 13 | 14 | init(content: Post) { 15 | self.content = content 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/SwiftUIDemo/ViewModel/RowViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RowViewModel.swift 3 | // iOSTest 4 | // 5 | // Created by chenyilong on 2023/7/2. 6 | // 7 | 8 | import Foundation 9 | 10 | /// Conform this protocol to handles user press action 11 | protocol ViewModelClickable { 12 | var cellPressed: (()->Void)? { get set } 13 | } 14 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/SwiftUI/SwiftUIDemo/banner.png -------------------------------------------------------------------------------- /SwiftUI/SwiftUIDemo/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/SwiftUI/SwiftUIDemo/preview.gif -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVPattern_MovieApp/MovieApp/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 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVPattern_MovieApp/MovieApp/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVPattern_MovieApp/MovieApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVPattern_MovieApp/MovieApp/Info.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>NSAppTransportSecurity</key> 6 | <dict> 7 | <key>NSAllowsArbitraryLoads</key> 8 | <true/> 9 | </dict> 10 | </dict> 11 | </plist> 12 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVPattern_MovieApp/MovieApp/Models/MovieDetail.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieDetail.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 8/8/24. 6 | // 7 | 8 | import Foundation 9 | 10 | struct MovieDetail: Decodable, Identifiable { 11 | 12 | let imdbId: String 13 | let title: String 14 | let poster: URL 15 | let director: String 16 | 17 | var id: String { 18 | imdbId 19 | } 20 | 21 | private enum CodingKeys: String, CodingKey { 22 | case imdbId = "imdbID" 23 | case title = "Title" 24 | case poster = "Poster" 25 | case director = "Director" 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVPattern_MovieApp/MovieApp/Models/MovieResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieResponse.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 8/8/24. 6 | // 7 | 8 | import Foundation 9 | 10 | struct MovieResponse: Decodable { 11 | let search: [Movie] 12 | 13 | private enum CodingKeys: String, CodingKey { 14 | case search = "Search" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVPattern_MovieApp/MovieApp/Models/NewsArticle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NewsArticle.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 8/8/24. 6 | // 7 | 8 | import Foundation 9 | 10 | struct NewsArticle: Decodable, Identifiable { 11 | let title: String 12 | let description: String 13 | let id = UUID() 14 | 15 | private enum CodingKeys: String, CodingKey { 16 | case title = "title" 17 | case description = "description" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVPattern_MovieApp/MovieApp/Models/NewsArticleResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NewsArticleResponse.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 8/8/24. 6 | // 7 | 8 | import Foundation 9 | 10 | struct NewsArticleResponse: Decodable { 11 | let articles: [NewsArticle] 12 | } 13 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVPattern_MovieApp/MovieApp/MovieAppApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieAppApp.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 8/8/24. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct MovieAppApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVPattern_MovieApp/MovieApp/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/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 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/Extensions/Date+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Date+Extensions.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 2/24/24. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Date { 11 | 12 | func asFormattedString() -> String { 13 | let formatter = DateFormatter() 14 | formatter.dateFormat = "MM/dd/yyyy" 15 | return formatter.string(from: self) 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/Extensions/View+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // View+Extensions.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 2/24/24. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | 11 | extension View { 12 | func embedInNavigationView() -> some View { 13 | NavigationView { self } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/Models/Actor+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Actor+Extensions.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 3/14/24. 6 | // 7 | 8 | import Foundation 9 | import CoreData 10 | 11 | extension Actor: BaseModel { 12 | 13 | static func getActorsByMovieId(movieId: NSManagedObjectID) -> [Actor] { 14 | guard let movie = Movie.byId(id: movieId) as? Movie, 15 | let actors = movie.actors 16 | else { 17 | return [] 18 | } 19 | 20 | return (actors.allObjects as? [Actor]) ?? [] 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/Models/Movie+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie+Extensions.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 3/11/24. 6 | // 7 | 8 | import Foundation 9 | import CoreData 10 | 11 | extension Movie: BaseModel { 12 | 13 | static func byActorName(name: String) -> [Movie] { 14 | 15 | let request: NSFetchRequest<Movie> = Movie.fetchRequest() 16 | request.predicate = NSPredicate(format: "actors.name CONTAINS %@", name) 17 | 18 | do { 19 | return try viewContext.fetch(request) 20 | } catch { 21 | print(error) 22 | return [] 23 | } 24 | 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/Models/Review+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Review+Extensions.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 3/3/24. 6 | // 7 | 8 | import Foundation 9 | import CoreData 10 | 11 | extension Review: BaseModel { 12 | 13 | static func getReviewsByMovieId(movieId: NSManagedObjectID) -> [Review] { 14 | 15 | let request: NSFetchRequest<Review> = Review.fetchRequest() 16 | request.predicate = NSPredicate(format: "movie = %@", movieId) 17 | 18 | do { 19 | return try viewContext.fetch(request) 20 | } catch { 21 | return [] 22 | } 23 | 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/MovieAppApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MovieAppApp.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 2/23/24. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct MovieAppApp: App { 12 | 13 | init() { 14 | UITableView.appearance().separatorStyle = .none 15 | } 16 | 17 | var body: some Scene { 18 | WindowGroup { 19 | MovieListScreen() 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/View Models/AddActorViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AddActorViewModel.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 3/14/24. 6 | // 7 | 8 | import Foundation 9 | import CoreData 10 | 11 | class AddActorViewModel: ObservableObject { 12 | 13 | var name: String = "" 14 | 15 | func addActorToMovie(movieId: NSManagedObjectID) { 16 | 17 | let movie: Movie? = Movie.byId(id: movieId) 18 | 19 | if let movie = movie { 20 | let actor = Actor(context: Actor.viewContext) 21 | actor.name = name 22 | actor.addToMovies(movie) 23 | 24 | try? actor.save() 25 | } 26 | 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/View Models/AddMovieViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AddMovieViewModel.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 2/26/24. 6 | // 7 | 8 | import Foundation 9 | 10 | class AddMovieViewModel: ObservableObject { 11 | 12 | var title: String = "" 13 | var director: String = "" 14 | @Published var rating: Int? = nil 15 | var releaseDate: Date = Date() 16 | 17 | func save() { 18 | 19 | let movie = Movie(context: Movie.viewContext) 20 | movie.title = title 21 | movie.director = director 22 | movie.rating = Double(rating ?? 0) 23 | movie.releaseDate = releaseDate 24 | 25 | try? movie.save() 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIMVVM_MovieApp/MovieApp/View Models/AddReviewViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AddReviewViewModel.swift 3 | // MovieApp 4 | // 5 | // Created by Yilong Chen on 3/2/24. 6 | // 7 | 8 | import Foundation 9 | 10 | class AddReviewViewModel: ObservableObject { 11 | 12 | var title: String = "" 13 | var text: String = "" 14 | 15 | func addReviewForMovie(vm: MovieViewModel) { 16 | 17 | let movie: Movie? = Movie.byId(id: vm.movieId) 18 | 19 | let review = Review(context: Movie.viewContext) 20 | review.title = title 21 | review.text = text 22 | review.movie = movie 23 | 24 | // save the review 25 | try? review.save() 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/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 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/Models/Task.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Task.swift 3 | // SwiftUIRedux 4 | // 5 | // Created by chenyilong on 2024/7/14. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Task { 11 | let id = UUID() 12 | let title: String 13 | } 14 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/Store/middlewares/IncrementMiddleware.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IncrementMiddleware.swift 3 | // SwiftUIRedux 4 | // 5 | // Created by chenyilong on 2024/7/14. 6 | // 7 | 8 | import Foundation 9 | 10 | func incrementMiddleware() -> Middleware<AppState> { 11 | return { state, action, dispatch in 12 | switch action { 13 | case _ as IncrementActionAsync: 14 | DispatchQueue.main.asyncAfter(deadline: .now() + 1) { 15 | dispatch(IncrementAction()) 16 | print("dispatch IncrementActionAsync") 17 | } 18 | default: 19 | break 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/Store/middlewares/LogMiddleware.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LogMiddleware.swift 3 | // SwiftUIRedux 4 | // 5 | // Created by chenyilong on 2024/7/14. 6 | // 7 | 8 | import Foundation 9 | 10 | func logMiddleware() -> Middleware<AppState> { 11 | return { state, action, dispatch in 12 | print("logMiddleware Action trigger: \(action)") 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/Store/reducers/AppReducer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppReducer.swift 3 | // SwiftUIRedux 4 | // 5 | // Created by chenyilong on 2024/7/14. 6 | // 7 | 8 | import Foundation 9 | 10 | func appReducer(_ state: AppState,_ action: Action) -> AppState { 11 | var state = state 12 | state.counterState = counterReducer(state.counterState, action) 13 | state.taskState = taskReducer(state.taskState, action) 14 | return state 15 | } 16 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/Store/reducers/CounterReducer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CounterReducer.swift 3 | // SwiftUIRedux 4 | // 5 | // Created by chenyilong on 2024/7/14. 6 | // 7 | 8 | import Foundation 9 | 10 | func counterReducer(_ state: CounterState,_ action: Action) -> CounterState { 11 | var state = state 12 | switch action { 13 | case _ as IncrementAction: 14 | state.counter += 1 15 | case _ as DecrementAction: 16 | state.counter -= 1 17 | case let action as addAction: 18 | state.counter += action.value 19 | case let action as getMoviesAction: 20 | state.movies = action.moveis 21 | default: 22 | break 23 | } 24 | 25 | return state 26 | } 27 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/Store/reducers/TaskReducer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TaskReducer.swift 3 | // SwiftUIRedux 4 | // 5 | // Created by chenyilong on 2024/7/14. 6 | // 7 | 8 | import Foundation 9 | 10 | func taskReducer(_ state: TaskState,_ action: Action) -> TaskState { 11 | var state = state 12 | switch action { 13 | case let action as AddTaskAction: 14 | state.tasks.append(action.task) 15 | default: 16 | break 17 | } 18 | 19 | return state 20 | } 21 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux/SwiftUIRedux/SwiftUIReduxApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftUIReduxApp.swift 3 | // SwiftUIRedux 4 | // 5 | // Created by chenyilong on 2024/7/14. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct SwiftUIReduxApp: App { 12 | var body: some Scene { 13 | let store = Store(reducer: appReducer, state: AppState(), middlewares: [logMiddleware(), incrementMiddleware()]) 14 | WindowGroup { 15 | ContentView().environmentObject(store) 16 | // AddTaskView().environmentObject(store) 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/Shared/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 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/Shared/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/Shared/Assets.xcassets/placeholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "placeholder.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 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/Shared/Assets.xcassets/placeholder.imageset/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/SwiftUI/SwiftUIRedux_MovieApp/Shared/Assets.xcassets/placeholder.imageset/placeholder.png -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/Shared/Extensions/String+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Extensions.swift 3 | // ReduxAsync 4 | // 5 | // Created by chenyilong on 2024/7/21. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | 11 | extension String { 12 | func urlEncode() -> String { 13 | self.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? self 14 | } 15 | 16 | func toInt() -> Int { 17 | let ratingDouble = Double(self) ?? 0 18 | return Int(ratingDouble.rounded()) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/Shared/Extensions/View+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // View+Extensions.swift 3 | // ReduxAsync 4 | // 5 | // Created by Yilong Chen on 9/21/24. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | 11 | extension View { 12 | 13 | func embedInNavigationView() -> some View { 14 | NavigationView { self } 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/Shared/HelloReduxApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HelloReduxApp.swift 3 | // Shared 4 | // 5 | // Created by Yilong Chen on 9/14/24. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct HelloReduxApp: App { 12 | var body: some Scene { 13 | 14 | let store = Store(reducer: appReducer, state: AppState(), 15 | middlewares: [moviesMiddleware()]) 16 | 17 | WindowGroup { 18 | ContentView().environmentObject(store) 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/Shared/Models/Movie.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // ReduxAsync 4 | // 5 | // Created by Yilong Chen on 9/18/24. 6 | // 7 | 8 | import Foundation 9 | 10 | struct MovieResponse: Codable { 11 | let movies: [Movie] 12 | 13 | private enum CodingKeys: String, CodingKey { 14 | case movies = "Search" 15 | } 16 | } 17 | 18 | 19 | struct Movie: Codable { 20 | 21 | let title: String 22 | let imdbId: String 23 | let poster: String 24 | 25 | private enum CodingKeys: String, CodingKey { 26 | case title = "Title" 27 | case imdbId = "imdbID" 28 | case poster = "Poster" 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/Shared/Store/reducers/AppReducer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppReducer.swift 3 | // CombiningReducers 4 | // 5 | // Created by Yilong Chen on 9/15/24. 6 | // 7 | 8 | import Foundation 9 | 10 | func appReducer(_ state: AppState, _ action: Action) -> AppState { 11 | 12 | var state = state 13 | state.moviesState = moviesReducer(state: state.moviesState, action: action) 14 | return state 15 | } 16 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/Shared/Store/reducers/MoviesReducer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MoviesReducer.swift 3 | // ReduxAsync 4 | // 5 | // Created by Yilong Chen on 9/21/24. 6 | // 7 | 8 | import Foundation 9 | 10 | func moviesReducer(state: MoviesState, action: Action) -> MoviesState { 11 | 12 | var state = state 13 | 14 | switch action { 15 | case let action as SetMoviesAction: 16 | state.movies = action.movies 17 | case let action as SetMovieDetailAction: 18 | state.selectedMovieDetail = action.movieDetail 19 | default: 20 | break 21 | } 22 | 23 | return state 24 | } 25 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp/macOS/macOS.entitlements: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>com.apple.security.app-sandbox</key> 6 | <true/> 7 | <key>com.apple.security.files.user-selected.read-only</key> 8 | <true/> 9 | </dict> 10 | </plist> 11 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp_101/HelloRedux/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp_101/HelloRedux/Models/Movie.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Movie.swift 3 | // HelloRedux 4 | // 5 | // Created by Yilong Chen on 9/9/24. 6 | // Copyright © 2024 Yilong Chen. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct MovieResponse: Decodable { 12 | 13 | let movies: [Movie] 14 | 15 | private enum CodingKeys: String, CodingKey { 16 | case movies = "Search" 17 | } 18 | 19 | } 20 | 21 | struct Movie: Decodable { 22 | 23 | let title: String 24 | let imdbId: String 25 | 26 | private enum CodingKeys: String, CodingKey { 27 | case title = "Title" 28 | case imdbId = "imdbID" 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp_101/HelloRedux/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_MovieApp_101/HelloRedux/Utils/Constants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Constants.swift 3 | // HelloRedux 4 | // 5 | // Created by Yilong Chen on 9/10/24. 6 | // Copyright © 2024 Yilong Chen. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Constants { 12 | 13 | static let MOVIES_URL = "http://www.omdbapi.com/?s=batman&apikey=YOUAPIKEY" 14 | 15 | } 16 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/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 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Extensions/String+Extensions.swift: -------------------------------------------------------------------------------- 1 | 2 | 3 | import Foundation 4 | 5 | extension String { 6 | 7 | func encodeURL() -> String? { 8 | return self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Extensions/View+Extensions.swift: -------------------------------------------------------------------------------- 1 | 2 | 3 | import Foundation 4 | import SwiftUI 5 | 6 | extension View { 7 | func embedInNavigationView() -> some View { 8 | NavigationView { self } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Managers/Logger/Logger.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Logger.swift 3 | // RestRoomFinder 4 | // 5 | // Created by Yilong Chen on 09/06/2024. 6 | // 7 | 8 | import Foundation 9 | 10 | public protocol Logger { 11 | func debug(_ message: String) 12 | func info(_ message: String) 13 | func error(_ message: String) 14 | func fault(_ message: String) 15 | } 16 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Services/RestroomService.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RestroomService.swift 3 | // RestRoomFinder 4 | // 5 | // Created by Yilong Chen on 09/06/2024. 6 | // 7 | 8 | import Foundation 9 | 10 | struct RestroomService { 11 | 12 | func getRestRoomByLatLong(lat: Double, long: Double) async throws -> [Restroom]? { 13 | let urlString = Constants.Urls.restroomsByLatAndLng(lat: lat, lng: long) 14 | 15 | logger.debug(urlString) 16 | 17 | let restrooms: [Restroom] = try await networkManager.get(urlString: urlString) 18 | return restrooms 19 | } 20 | 21 | let logger: Logger 22 | let networkManager: NetworkManager 23 | } 24 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Store/Actions/Actions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Actions.swift 3 | // RestRoomFinder 4 | // 5 | // Created by Yilong Chen on 10/15/24. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol Action { } 11 | 12 | struct FetchRestroomsAction: Action { 13 | let latitude: Double 14 | let longitude: Double 15 | } 16 | 17 | struct SetRestroomsAction: Action { 18 | let restrooms: [Restroom] 19 | } 20 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Store/Reducers/AppReducer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppReducer.swift 3 | // CombiningReducers 4 | // 5 | // Created by Yilong Chen on 9/15/24. 6 | // 7 | 8 | import Foundation 9 | 10 | func appReducer( 11 | _ state: AppState, 12 | _ action: Action 13 | ) -> AppState { 14 | 15 | var state = state 16 | state.restrooms = restroomsReducer(state.restrooms, action) 17 | return state 18 | } 19 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Store/Reducers/RestroomReducer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RestroomReducer.swift 3 | // RestRoomFinder 4 | // 5 | // Created by Yilong Chen on 09/06/2024. 6 | // 7 | 8 | import Foundation 9 | 10 | func restroomsReducer( 11 | _ state: RestRoomState, 12 | _ action: Action 13 | ) -> RestRoomState { 14 | var state = state 15 | switch action { 16 | case let action as SetRestroomsAction: 17 | state.restrooms = action.restrooms 18 | default: 19 | break 20 | } 21 | return state 22 | } 23 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUIRedux_RestRoomFinder/RestRoomFinder/Utils/Constants.swift: -------------------------------------------------------------------------------- 1 | 2 | 3 | import Foundation 4 | 5 | struct Constants { 6 | struct Urls { 7 | static func restroomsByLatAndLng(lat: Double, lng: Double) -> String { 8 | "https://www.refugerestrooms.org/api/v1/restrooms/by_location?lat=\(lat)&lng=\(lng)" 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI_CoreData/HelloCoreData/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 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI_CoreData/HelloCoreData/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI_CoreData/HelloCoreData/HelloCoreData.xcdatamodeld/HelloCoreData.xcdatamodel/contents: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 2 | <model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="17709" systemVersion="19F101" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier=""> 3 | <entity name="Movie" representedClassName="Movie" syncable="YES" codeGenerationType="class"> 4 | <attribute name="title" attributeType="String"/> 5 | </entity> 6 | <elements> 7 | <element name="Movie" positionX="-63" positionY="-18" width="128" height="58"/> 8 | </elements> 9 | </model> -------------------------------------------------------------------------------- /SwiftUI/SwiftUI_CoreData/HelloCoreData/HelloCoreDataApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HelloCoreDataApp.swift 3 | // HelloCoreData 4 | // 5 | // Created by Yilong Chen on 2/8/24. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct HelloCoreDataApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView(coreDM: CoreDataManager()) 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SwiftUI/SwiftUI_CoreData/HelloCoreData/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /assets/16911993105830.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911993105830.jpg -------------------------------------------------------------------------------- /assets/16911993775698.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911993775698.jpg -------------------------------------------------------------------------------- /assets/16911993939541.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911993939541.jpg -------------------------------------------------------------------------------- /assets/16911994019477.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911994019477.jpg -------------------------------------------------------------------------------- /assets/16911994188320.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911994188320.jpg -------------------------------------------------------------------------------- /assets/16911994290631.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911994290631.jpg -------------------------------------------------------------------------------- /assets/16911994377956.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911994377956.jpg -------------------------------------------------------------------------------- /assets/16911994601308.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911994601308.jpg -------------------------------------------------------------------------------- /assets/16911994672006.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911994672006.jpg -------------------------------------------------------------------------------- /assets/16911994768336.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911994768336.jpg -------------------------------------------------------------------------------- /assets/16911994872119.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911994872119.jpg -------------------------------------------------------------------------------- /assets/16911994941254.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911994941254.jpg -------------------------------------------------------------------------------- /assets/16911995736181.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911995736181.jpg -------------------------------------------------------------------------------- /assets/16911995859741.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911995859741.jpg -------------------------------------------------------------------------------- /assets/16911995927355.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911995927355.jpg -------------------------------------------------------------------------------- /assets/16911996015251.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996015251.jpg -------------------------------------------------------------------------------- /assets/16911996112667.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996112667.jpg -------------------------------------------------------------------------------- /assets/16911996216316.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996216316.jpg -------------------------------------------------------------------------------- /assets/16911996296998.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996296998.jpg -------------------------------------------------------------------------------- /assets/16911996385220.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996385220.jpg -------------------------------------------------------------------------------- /assets/16911996457612.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996457612.jpg -------------------------------------------------------------------------------- /assets/16911996525270.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996525270.jpg -------------------------------------------------------------------------------- /assets/16911996627336.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996627336.jpg -------------------------------------------------------------------------------- /assets/16911996707498.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996707498.jpg -------------------------------------------------------------------------------- /assets/16911996765839.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996765839.jpg -------------------------------------------------------------------------------- /assets/16911996818935.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911996818935.jpg -------------------------------------------------------------------------------- /assets/16911997093380.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16911997093380.jpg -------------------------------------------------------------------------------- /assets/16912025406113.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912025406113.jpg -------------------------------------------------------------------------------- /assets/16912026477007.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912026477007.jpg -------------------------------------------------------------------------------- /assets/16912073172453.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912073172453.jpg -------------------------------------------------------------------------------- /assets/16912073267482.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912073267482.jpg -------------------------------------------------------------------------------- /assets/16912073397523.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912073397523.jpg -------------------------------------------------------------------------------- /assets/16912073494698.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912073494698.jpg -------------------------------------------------------------------------------- /assets/16912073606938.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912073606938.jpg -------------------------------------------------------------------------------- /assets/16912073940590.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912073940590.jpg -------------------------------------------------------------------------------- /assets/16912074008587.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912074008587.jpg -------------------------------------------------------------------------------- /assets/16912074108843.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912074108843.jpg -------------------------------------------------------------------------------- /assets/16912074297283.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912074297283.jpg -------------------------------------------------------------------------------- /assets/16912074367818.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/16912074367818.jpg -------------------------------------------------------------------------------- /assets/CleanArchitecture/CleanArchitectureQ1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/CleanArchitecture/CleanArchitectureQ1.jpg -------------------------------------------------------------------------------- /assets/CleanArchitecture/CleanArchitectureQ2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/CleanArchitecture/CleanArchitectureQ2.jpg -------------------------------------------------------------------------------- /assets/CleanArchitecture/CleanArchitectureQ3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/CleanArchitecture/CleanArchitectureQ3.jpg -------------------------------------------------------------------------------- /assets/MVVM_Clean_SOLID/banner_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/MVVM_Clean_SOLID/banner_cn.png -------------------------------------------------------------------------------- /assets/MVVM_Clean_SOLID/banner_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/MVVM_Clean_SOLID/banner_en.png -------------------------------------------------------------------------------- /assets/MVVM_Clean_SOLID/cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/MVVM_Clean_SOLID/cn.png -------------------------------------------------------------------------------- /assets/MVVM_Clean_SOLID/en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/MVVM_Clean_SOLID/en.png -------------------------------------------------------------------------------- /assets/MVVM_Clean_SOLID/tca_horizontal_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/MVVM_Clean_SOLID/tca_horizontal_layer.png -------------------------------------------------------------------------------- /assets/MVVM_Clean_SOLID/tca_onion_layering.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/MVVM_Clean_SOLID/tca_onion_layering.png -------------------------------------------------------------------------------- /assets/Property_Wrapper_in_SwiftUI.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/Property_Wrapper_in_SwiftUI.jpg -------------------------------------------------------------------------------- /assets/Property_Wrapper_in_SwiftUI/ios16_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/Property_Wrapper_in_SwiftUI/ios16_code.png -------------------------------------------------------------------------------- /assets/Property_Wrapper_in_SwiftUI/ios16_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/Property_Wrapper_in_SwiftUI/ios16_overview.png -------------------------------------------------------------------------------- /assets/Property_Wrapper_in_SwiftUI/ios16_pros_cons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/Property_Wrapper_in_SwiftUI/ios16_pros_cons.png -------------------------------------------------------------------------------- /assets/Property_Wrapper_in_SwiftUI/ios17_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/Property_Wrapper_in_SwiftUI/ios17_code.png -------------------------------------------------------------------------------- /assets/Property_Wrapper_in_SwiftUI/ios17_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/Property_Wrapper_in_SwiftUI/ios17_overview.png -------------------------------------------------------------------------------- /assets/Property_Wrapper_in_SwiftUI/ios17_pros_cons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/Property_Wrapper_in_SwiftUI/ios17_pros_cons.png -------------------------------------------------------------------------------- /assets/SCRUM_PROCESS.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/SCRUM_PROCESS.jpg -------------------------------------------------------------------------------- /assets/SwiftUI_and_Combine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/SwiftUI_and_Combine.png -------------------------------------------------------------------------------- /assets/SwiftUI_and_Combine.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/SwiftUI_and_Combine.xmind -------------------------------------------------------------------------------- /assets/SwiftUI_vs_UIKit_Lifecycle_Methods_Difference.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/SwiftUI_vs_UIKit_Lifecycle_Methods_Difference.jpg -------------------------------------------------------------------------------- /assets/Swift_practical_Interview_Questions.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/Swift_practical_Interview_Questions.jpg -------------------------------------------------------------------------------- /assets/Swift_theory_Interview_Questions.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/Swift_theory_Interview_Questions.jpg -------------------------------------------------------------------------------- /assets/TCA_Each_View_has_its_Store_architecture_design_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/TCA_Each_View_has_its_Store_architecture_design_pattern.png -------------------------------------------------------------------------------- /assets/TCA_schema_architecture_design_pattern.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/TCA_schema_architecture_design_pattern.jpg -------------------------------------------------------------------------------- /assets/VIPER_architecture_design_pattern/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/VIPER_architecture_design_pattern/1.jpg -------------------------------------------------------------------------------- /assets/VIPER_architecture_design_pattern/VIPER_architecture_design_pattern_model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/VIPER_architecture_design_pattern/VIPER_architecture_design_pattern_model.jpg -------------------------------------------------------------------------------- /assets/VIPER_architecture_design_pattern/viper_architecture_design_pattern_en.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/VIPER_architecture_design_pattern/viper_architecture_design_pattern_en.jpg -------------------------------------------------------------------------------- /assets/VIPER_architecture_design_pattern_model.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/VIPER_architecture_design_pattern_model.gif -------------------------------------------------------------------------------- /assets/asynchronous_APIs_in_iOS/cn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/asynchronous_APIs_in_iOS/cn.jpg -------------------------------------------------------------------------------- /assets/asynchronous_APIs_in_iOS/en.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/asynchronous_APIs_in_iOS/en.jpg -------------------------------------------------------------------------------- /assets/closure_vs_block/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/closure_vs_block/banner.jpg -------------------------------------------------------------------------------- /assets/closure_vs_block/closure_vs_block_map.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/closure_vs_block/closure_vs_block_map.jpg -------------------------------------------------------------------------------- /assets/closure_vs_block/closure_vs_block_question1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/closure_vs_block/closure_vs_block_question1.jpg -------------------------------------------------------------------------------- /assets/closure_vs_block/closure_vs_block_question2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/closure_vs_block/closure_vs_block_question2.jpg -------------------------------------------------------------------------------- /assets/closure_vs_block/closure_vs_block_question3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/closure_vs_block/closure_vs_block_question3.jpg -------------------------------------------------------------------------------- /assets/iTeaTime-omnigraffle-模版.graffle/data.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/iTeaTime-omnigraffle-模版.graffle/data.plist -------------------------------------------------------------------------------- /assets/iTeaTime-omnigraffle-模版.graffle/image3.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/iTeaTime-omnigraffle-模版.graffle/image3.tiff -------------------------------------------------------------------------------- /assets/iTeaTime-omnigraffle-模版.graffle/preview.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/iTeaTime-omnigraffle-模版.graffle/preview.jpeg -------------------------------------------------------------------------------- /assets/mindmap_of_Behavioral_based_interviewing_Competency_Based.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mindmap_of_Behavioral_based_interviewing_Competency_Based.png -------------------------------------------------------------------------------- /assets/mindmap_of_Behavioral_based_interviewing_Competency_Based.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mindmap_of_Behavioral_based_interviewing_Competency_Based.xmind -------------------------------------------------------------------------------- /assets/mindmap_of_Swift_interview_question.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mindmap_of_Swift_interview_question.xmind -------------------------------------------------------------------------------- /assets/mvp_architecture_design_pattern.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvp_architecture_design_pattern.graffle -------------------------------------------------------------------------------- /assets/mvp_architecture_design_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvp_architecture_design_pattern.png -------------------------------------------------------------------------------- /assets/mvp_architecture_design_pattern/mvp_architecture_design_pattern_QA.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvp_architecture_design_pattern/mvp_architecture_design_pattern_QA.jpg -------------------------------------------------------------------------------- /assets/mvp_architecture_design_pattern/mvp_architecture_design_pattern_cn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvp_architecture_design_pattern/mvp_architecture_design_pattern_cn.jpg -------------------------------------------------------------------------------- /assets/mvp_architecture_design_pattern/mvp_architecture_design_pattern_en.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvp_architecture_design_pattern/mvp_architecture_design_pattern_en.jpg -------------------------------------------------------------------------------- /assets/mvp_architecture_design_pattern/mvp_architecture_design_pattern_presenters_replace_controller.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvp_architecture_design_pattern/mvp_architecture_design_pattern_presenters_replace_controller.jpg -------------------------------------------------------------------------------- /assets/mvp_architecture_design_pattern_presenters_replace_controller.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvp_architecture_design_pattern_presenters_replace_controller.gif -------------------------------------------------------------------------------- /assets/mvvm_architecture_design_pattern.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvvm_architecture_design_pattern.graffle -------------------------------------------------------------------------------- /assets/mvvm_architecture_design_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvvm_architecture_design_pattern.png -------------------------------------------------------------------------------- /assets/mvvm_architecture_design_pattern/mvvm_architecture_design_pattern_cn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvvm_architecture_design_pattern/mvvm_architecture_design_pattern_cn.jpg -------------------------------------------------------------------------------- /assets/mvvm_architecture_design_pattern/mvvm_architecture_design_pattern_en.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/mvvm_architecture_design_pattern/mvvm_architecture_design_pattern_en.jpg -------------------------------------------------------------------------------- /assets/pair_programming.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/pair_programming.jpg -------------------------------------------------------------------------------- /assets/pair_programming_process_driver-navigator-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/pair_programming_process_driver-navigator-diagram.png -------------------------------------------------------------------------------- /assets/pair_programming_process_softwarequal-pair_programming_styles-f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/pair_programming_process_softwarequal-pair_programming_styles-f.png -------------------------------------------------------------------------------- /assets/redux_architecture_design_pattern.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/redux_architecture_design_pattern.graffle -------------------------------------------------------------------------------- /assets/redux_architecture_design_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/redux_architecture_design_pattern.png -------------------------------------------------------------------------------- /assets/redux_architecture_design_pattern/redux_architecture_design_pattern_QA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/redux_architecture_design_pattern/redux_architecture_design_pattern_QA.png -------------------------------------------------------------------------------- /assets/redux_architecture_design_pattern/redux_architecture_design_pattern_copy1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/redux_architecture_design_pattern/redux_architecture_design_pattern_copy1.png -------------------------------------------------------------------------------- /assets/redux_architecture_design_pattern/redux_architecture_design_pattern_copy2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/redux_architecture_design_pattern/redux_architecture_design_pattern_copy2.png -------------------------------------------------------------------------------- /assets/redux_architecture_design_pattern/redux_architecture_design_pattern_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/redux_architecture_design_pattern/redux_architecture_design_pattern_en.png -------------------------------------------------------------------------------- /assets/redux_architecture_design_pattern_copy.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/redux_architecture_design_pattern_copy.graffle -------------------------------------------------------------------------------- /assets/redux_architecture_design_pattern_copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/redux_architecture_design_pattern_copy.png -------------------------------------------------------------------------------- /assets/redux_swiftui_architecture_design_pattern.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/redux_swiftui_architecture_design_pattern.graffle -------------------------------------------------------------------------------- /assets/redux_swiftui_architecture_design_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/redux_swiftui_architecture_design_pattern.png -------------------------------------------------------------------------------- /assets/solid/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/1.jpg -------------------------------------------------------------------------------- /assets/solid/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/10.jpg -------------------------------------------------------------------------------- /assets/solid/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/11.jpg -------------------------------------------------------------------------------- /assets/solid/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/12.jpg -------------------------------------------------------------------------------- /assets/solid/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/13.jpg -------------------------------------------------------------------------------- /assets/solid/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/14.jpg -------------------------------------------------------------------------------- /assets/solid/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/2.jpg -------------------------------------------------------------------------------- /assets/solid/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/3.jpg -------------------------------------------------------------------------------- /assets/solid/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/4.jpg -------------------------------------------------------------------------------- /assets/solid/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/5.jpg -------------------------------------------------------------------------------- /assets/solid/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/6.jpg -------------------------------------------------------------------------------- /assets/solid/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/7.jpg -------------------------------------------------------------------------------- /assets/solid/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/8.jpg -------------------------------------------------------------------------------- /assets/solid/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/solid/9.jpg -------------------------------------------------------------------------------- /assets/swift-combine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/swift-combine.jpg -------------------------------------------------------------------------------- /assets/swift_map_type_diff/swift_map_type_diff_cn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/swift_map_type_diff/swift_map_type_diff_cn.jpg -------------------------------------------------------------------------------- /assets/swift_map_type_diff/swift_map_type_diff_en.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/swift_map_type_diff/swift_map_type_diff_en.jpg -------------------------------------------------------------------------------- /assets/tca_architecture_design_pattern.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/tca_architecture_design_pattern.graffle -------------------------------------------------------------------------------- /assets/tca_architecture_design_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/tca_architecture_design_pattern.png -------------------------------------------------------------------------------- /assets/tca_architecture_design_pattern/tca_architecture_design_pattern_QA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/tca_architecture_design_pattern/tca_architecture_design_pattern_QA.png -------------------------------------------------------------------------------- /assets/tca_architecture_design_pattern/tca_architecture_design_pattern_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/tca_architecture_design_pattern/tca_architecture_design_pattern_en.png -------------------------------------------------------------------------------- /assets/viper_architecture_design_pattern.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/viper_architecture_design_pattern.graffle -------------------------------------------------------------------------------- /assets/viper_architecture_design_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/assets/viper_architecture_design_pattern.png -------------------------------------------------------------------------------- /banner-coding-challenge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/banner-coding-challenge.png -------------------------------------------------------------------------------- /banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/banner.png -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/.expo/devices.json: -------------------------------------------------------------------------------- 1 | { 2 | "devices": [] 3 | } 4 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/.expo/prebuild/cached-packages.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": "3c47043f44c7ed093572a2ab9d39862c2e5b263a", 3 | "devDependencies": "83c4c343b98be7074170957c1a1b3b163b43f0b1" 4 | } 5 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/RCTRandomColorGeneratorModule/RCTRandomColorGeneratorModule/RCTRandomColorGeneratorModule.h: -------------------------------------------------------------------------------- 1 | // 2 | // RCTRandomColorGeneratorModule.h 3 | // RCTRandomColorGeneratorModule 4 | // 5 | // Created by chenyilong on 2022/8/29. 6 | // 7 | #import <React/RCTBridgeModule.h> 8 | #import <UIKit/UIKit.h> 9 | 10 | typedef enum { 11 | RNColorGeneratorOptionHEX = 0, 12 | RNColorGeneratorOptionRGB = 1 13 | } RNColorGeneratorOption; 14 | 15 | @interface RCTRandomColorGeneratorModule : NSObject <RCTBridgeModule> 16 | 17 | - (NSString *)_generate:(nonnull NSNumber *)option; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/READEM_resources_run_preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/cross-platform/ReactNativeDemo/READEM_resources_run_preview.gif -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/RandomColorGenerator/.expo-shared/assets.json: -------------------------------------------------------------------------------- 1 | { 2 | "12bb71342c6255bbf50437ec8f4441c083f47cdb74bd89160c15e4f43e52a1cb": true, 3 | "40b842e832070c58deac6aa9e08fa459302ee3f9da492c7e77d93d2fbf4a56fd": true 4 | } 5 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/RandomColorGenerator/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .expo/ 3 | dist/ 4 | npm-debug.* 5 | *.jks 6 | *.p8 7 | *.p12 8 | *.key 9 | *.mobileprovision 10 | *.orig.* 11 | web-build/ 12 | 13 | # macOS 14 | .DS_Store 15 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/RandomColorGenerator/App.js: -------------------------------------------------------------------------------- 1 | import { StatusBar } from 'expo-status-bar'; 2 | import { StyleSheet, Text, View } from 'react-native'; 3 | 4 | export default function App() { 5 | return ( 6 | <View style={styles.container}> 7 | <Text>Open up App.js to start working on your app!</Text> 8 | <StatusBar style="auto" /> 9 | </View> 10 | ); 11 | } 12 | 13 | const styles = StyleSheet.create({ 14 | container: { 15 | flex: 1, 16 | backgroundColor: '#fff', 17 | alignItems: 'center', 18 | justifyContent: 'center', 19 | }, 20 | }); 21 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/RandomColorGenerator/assets/adaptive-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/cross-platform/ReactNativeDemo/RandomColorGenerator/assets/adaptive-icon.png -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/RandomColorGenerator/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/cross-platform/ReactNativeDemo/RandomColorGenerator/assets/favicon.png -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/RandomColorGenerator/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/cross-platform/ReactNativeDemo/RandomColorGenerator/assets/icon.png -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/RandomColorGenerator/assets/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/cross-platform/ReactNativeDemo/RandomColorGenerator/assets/splash.png -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/RandomColorGenerator/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.cache(true); 3 | return { 4 | presets: ['babel-preset-expo'], 5 | }; 6 | }; 7 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/RandomColorGenerator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "randomcolorgenerator", 3 | "version": "1.0.0", 4 | "main": "node_modules/expo/AppEntry.js", 5 | "scripts": { 6 | "start": "expo start", 7 | "android": "expo start --android", 8 | "ios": "expo start --ios", 9 | "web": "expo start --web" 10 | }, 11 | "dependencies": { 12 | "expo": "~46.0.9", 13 | "expo-status-bar": "~1.4.0", 14 | "react": "18.0.0", 15 | "react-native": "0.69.5" 16 | }, 17 | "devDependencies": { 18 | "@babel/core": "^7.12.9" 19 | }, 20 | "private": true 21 | } 22 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "expo": { 3 | "name": "react-native-random-color-generator", 4 | "slug": "react-native-random-color-generator", 5 | "version": "0.0.1", 6 | "description": "random color generator API for React Native on iOS, Android and Windows", 7 | "sdkVersion": "46.0.0", 8 | "platforms": [ 9 | "ios", 10 | "android" 11 | ], 12 | "ios": { 13 | "bundleIdentifier": "com.anonymous.react-native-random-color-generator" 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/index.js: -------------------------------------------------------------------------------- 1 | import { registerRootComponent } from 'expo'; 2 | 3 | import App from './App'; 4 | 5 | // registerRootComponent calls AppRegistry.registerComponent('main', () => App); 6 | // It also ensures that whether you load the app in Expo Go or in a native build, 7 | // the environment is set up appropriately 8 | registerRootComponent(App); 9 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | .xcode.env.local 25 | 26 | # Bundle artifacts 27 | *.jsbundle 28 | 29 | # CocoaPods 30 | /Pods/ 31 | *.lock 32 | .expo/ -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/.xcode.env: -------------------------------------------------------------------------------- 1 | # This `.xcode.env` file is versioned and is used to source the environment 2 | # used when running script phases inside Xcode. 3 | # To customize your local environment, you can create an `.xcode.env.local` 4 | # file that is not versioned. 5 | 6 | # NODE_BINARY variable contains the PATH to the node executable. 7 | # 8 | # Customize the NODE_BINARY variable here. 9 | # For example, to use nvm with brew, add the following line 10 | # . "$(brew --prefix nvm)/nvm.sh" --no-use 11 | export NODE_BINARY=$(command -v node) 12 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/Podfile.properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "expo.jsEngine": "jsc" 3 | } 4 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <Workspace 3 | version = "1.0"> 4 | <FileRef 5 | location = "group:reactnativerandomcolorgenerator.xcodeproj"> 6 | </FileRef> 7 | <FileRef 8 | location = "group:Pods/Pods.xcodeproj"> 9 | </FileRef> 10 | </Workspace> 11 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>IDEDidComputeMac32BitWarning</key> 6 | <true/> 7 | </dict> 8 | </plist> 9 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import <Foundation/Foundation.h> 2 | #import <React/RCTBridgeDelegate.h> 3 | #import <UIKit/UIKit.h> 4 | 5 | #import <Expo/Expo.h> 6 | 7 | @interface AppDelegate : EXAppDelegateWrapper <RCTBridgeDelegate> 8 | 9 | @end 10 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "expo" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator/Images.xcassets/SplashScreenBackground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "image.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "scale": "2x" 11 | }, 12 | { 13 | "idiom": "universal", 14 | "scale": "3x" 15 | } 16 | ], 17 | "info": { 18 | "version": 1, 19 | "author": "expo" 20 | } 21 | } -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator/Images.xcassets/SplashScreenBackground.imageset/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/iOSInterviewQuestions/ede244d3d4dea8fb80915d8e774e20ec7f94963e/cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator/Images.xcassets/SplashScreenBackground.imageset/image.png -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator/Supporting/Expo.plist: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>EXUpdatesCheckOnLaunch</key> 6 | <string>ALWAYS</string> 7 | <key>EXUpdatesEnabled</key> 8 | <true/> 9 | <key>EXUpdatesLaunchWaitMs</key> 10 | <integer>0</integer> 11 | <key>EXUpdatesSDKVersion</key> 12 | <string>46.0.0</string> 13 | <key>EXUpdatesURL</key> 14 | <string>https://exp.host/@anonymous/react-native-random-color-generator</string> 15 | </dict> 16 | </plist> -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator/main.m: -------------------------------------------------------------------------------- 1 | #import <UIKit/UIKit.h> 2 | 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char * argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator/noop-file.swift: -------------------------------------------------------------------------------- 1 | // 2 | // @generated 3 | // A blank Swift file must be created for native modules with Swift files to work correctly. 4 | // 5 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/ios/reactnativerandomcolorgenerator/reactnativerandomcolorgenerator.entitlements: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 | <plist version="1.0"> 4 | <dict> 5 | <key>aps-environment</key> 6 | <string>development</string> 7 | </dict> 8 | </plist> -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'react-native', 3 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'] 4 | }; 5 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/metro.config.js: -------------------------------------------------------------------------------- 1 | // Learn more https://docs.expo.io/guides/customizing-metro 2 | const { getDefaultConfig } = require('expo/metro-config'); 3 | 4 | module.exports = getDefaultConfig(__dirname); 5 | -------------------------------------------------------------------------------- /cross-platform/ReactNativeDemo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "allowSyntheticDefaultImports": true, 5 | "esModuleInterop": true, 6 | "isolatedModules": true, 7 | "jsx": "react-native", 8 | "lib": [ 9 | "es2017" 10 | ], 11 | "types": [ 12 | "react-native", 13 | "jest" 14 | ], 15 | "moduleResolution": "node", 16 | "noEmit": true, 17 | "strict": true, 18 | "target": "esnext" 19 | }, 20 | "exclude": [ 21 | "node_modules", 22 | "babel.config.js", 23 | "metro.config.js", 24 | "jest.config.js" 25 | ], 26 | "extends": "expo/tsconfig.base" 27 | } 28 | --------------------------------------------------------------------------------