why defaults ?
→ 일반적으로 앱 시작시 기본 상태 or 기본 작동 방식을 결정하는 데에 사용되기 때문
infoPlist에서 앱 처음 런치할 때 스토리보드 설정하는 부분 지워준다.
SceneDelegate.swift
//willConnectTo
guard let scene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: scene)
//what viewController load
var storyboard: UIStoryboard!
var controller: UIViewController!
if UserDefaults.standard.hasOnbarded {
storyboard = UIStoryboard(name: "TabView", bundle: nil)
controller = storyboard.instantiateViewController(withIdentifier: TabViewController.identifier) as! TabViewController
} else {
storyboard = UIStoryboard(name: "Onboarding", bundle: nil)
controller = storyboard.instantiateViewController(withIdentifier: OnboardingViewController.identifier) as! OnboardingViewController
}
// 위의 VC를 rootVC로 설정
window?.rootViewController = controller
window?.makeKeyAndVisible()
UserDefaults를 앱 전체에서 사용하기 용이하도록 Extension으로 관리
// UserDefaults+Extension.swift
extension UserDefaults {
private enum UserDefaultsKeys: String {
case hasOnboarded
}
var hasOnbarded: Bool {
get { bool(forKey: UserDefaultsKeys.hasOnboarded.rawValue)}
set { setValue(newValue, forKey: UserDefaultsKeys.hasOnboarded.rawValue)}
}