애플리케이션이 시작될 때 객체의 인스턴스를 최초 1회만 생성(static)하여 사용하는 디자인 패턴
class SingletonClass {
static let shared = SingletonClass()
private init() {}
}
스위프트에서는 static let으로 객체의 인스턴스를 할당해주면 끝입니다!
그리고 인스턴스가 추가로 생성되는 것을 방지하기위해 init() 함수의 접근 제어자를 private으로 선언합니다.
class AppInfo {
static let shared = AppInfo()
private init() {}
var mainInfo: [String : Any]? {
guard let info = Bundle.main.infoDictionary else {
return nil
}
return info
}
var name: String? {
self.mainInfo?["CFBundleName"] as? String
}
var scheme: String? {
guard let urlTypes = self.mainInfo?["CFBundleURLTypes"] as? [AnyObject],
let urlTypeDictionary = urlTypes.first as? [String: AnyObject],
let urlSchemes = urlTypeDictionary["CFBundleURLSchemes"] as? [AnyObject],
let scheme = urlSchemes.first as? String else { return nil }
return scheme
}
var version: String? {
self.mainInfo?["CFBundleShortVersionString"] as? String
}
}
앱 정보의 프로퍼티를 저장하고 있는 AppInfo 클래스를 Singleton 작성한 코드입니다.
let appInfo = AppInfo.shared
if let appName = appInfo.name,
let appScheme = appInfo.scheme,
let appVersion = appInfo.version {
print("appName: \(appName)")
print("appScheme: \(appScheme)")
print("appVersion: \(appVersion)")
}
appInfo 변수에 AppInfo 클래스의 shared(인스턴스)를 가져옵니다.
이제 어떤 화면(클래스)에서든 해당 클래스의 프로퍼티에 접근할 수 있게되었습니다.
장점
단점