Apple의 Using Swift with Cocoa 및 Objective-C 문서 (Swift 3 용으로 업데이트 됨)에서는 다음과 같은 Singleton 패턴 예제를 제공합니다.
class Singleton {
    static let sharedInstance: Singleton = {
        let instance = Singleton()
        // setup code
        return instance
    }()
}
이 싱글 톤이 문자열의 가변 배열을 관리해야한다고 상상해 봅시다. 해당 속성을 어떻게 / 어디서 선언하고 빈 [String]배열로 올바르게 초기화되는지 확인 합니까?
답변
나를 위해 이것이 가장 좋은 방법입니다. init를 비공개로 만드십시오. Swift 3 \ 4 \ 5 구문
// MARK: - Singleton
final class Singleton {
    // Can't init is singleton
    private init() { }
    // MARK: Shared Instance
    static let shared = Singleton()
    // MARK: Local Variable
    var emptyStringArray = [String]()
}
답변
이와 같이 빈 배열을 초기화 할 수 있습니다.
class Singleton {
    //MARK: Shared Instance
    static let sharedInstance : Singleton = {
        let instance = Singleton(array: [])
        return instance
    }()
    //MARK: Local Variable
    var emptyStringArray : [String]
    //MARK: Init
    init( array : [String]) {
        emptyStringArray = array
    }
}
또는 다른 접근 방식을 선호하는 경우이 방법이 문제가되지 않습니다.
class Singleton {
    //MARK: Shared Instance
    static let sharedInstance : Singleton = {
        let instance = Singleton()
        return instance
    }()
    //MARK: Local Variable
    var emptyStringArray : [String]? = nil
    //MARK: Init
    convenience init() {
        self.init(array : [])
    }
    //MARK: Init Array
    init( array : [String]) {
        emptyStringArray = array
    }
}
답변
애플의 문서에 따르면 : Swift에서는 여러 스레드에서 동시에 액세스하더라도 한 번만 느리게 초기화되도록 보장되는 정적 유형 속성을 간단히 사용할 수 있습니다 .
class Singleton {
    // MARK: - Shared
    static let shared = Singleton()
}
초기화 방법 :
class Singleton {
    // MARK: - Shared
    static let shared = Singleton()
    // MARK: - Initializer
    private init() {
    }
}
답변
모든 초기화는 init 메소드에서 수행됩니다. 여기서 싱글 톤과 비 싱글 톤 사이에는 차이가 없습니다.
답변
