The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .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/&#x4e3a;&#x4ec0;&#x4e48;&#x4e0d;&#x63a8;&#x8350;&#x5728;init&#x65b9;&#x6cd5;&#x4e2d;&#x4f7f;&#x7528;&#x70b9;&#x8bed;&#x6cd5;/&#x4e3a;&#x4ec0;&#x4e48;&#x4e0d;&#x63a8;&#x8350;&#x5728;init&#x65b9;&#x6cd5;&#x4e2d;&#x4f7f;&#x7528;&#x70b9;&#x8bed;&#x6cd5;.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&#x5b9e;&#x73b0;&#x539f;&#x7406;.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 | ![https://github.com/ChenYilong](preview.gif)
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 | 


--------------------------------------------------------------------------------