최근 이런 식으로 쓰여진 개발 서적과 기사를 많이 봤습니다.
읽기 출처: http://www.cocoachina.com/swift/20151207/14584.html
책 읽기 출처: "iOS 개발 가이드, Zero Basics에서 App Store App Store 3판까지" 》10.4.1 예시
...
최근 기사입니다
가장 추악한 방법(스위프트 스킨, 오브젝티브-C 하트)
TheOneAndOnlyKraken {
클래스 var sharedInstance: TheOneAndOnlyKraken {
}
}
저는 이런 글쓰기 방식에 대해 오랫동안 고민해 왔습니다. (일주일 넘게 다른 자료도 읽었지만 아직 완전히 이해하지는 못합니다.)
내가 이해하지 못하는 주요 논리적 관계 이해할 수 없는 것은:
(클래스에서 클래스를 선언하고 내부 클래스를 생성하는 것입니다. 이것은 약간 복잡해야 합니다.)
1. 정의된 TheOneAndOnlyKraken 클래스에서 또 다른 클래스를 정의합니다. TheOneAndOnlyKraken 유형의 sharedInstance 클래스입니다. 이러한 중첩을 사용하여 sharedInstance가 생성되면 이 sharedInstance와 TheOneAndOnlyKraken 간의 논리적 관계를 어떻게 더 쉽게 이해해야 할까요? 끝없는 루프처럼 느껴집니다.
2. sharedInstance 클래스에 정적 구조가 정의되어 있으며, 이 구조에 TheOneAndOnlyKraken 유형의 변수 인스턴스가 선언되어 있습니다. 마지막으로 인스턴스 변수가 반환됩니다. 인스턴스와 정의된 두 클래스 간의 논리적 관계를 이해하는 방법은 비교적 이해하기 쉽습니다.
PS: 저는 초보자이고 이러한 설명에 익숙하지만 논리적 구조를 이해하지 못하고 무한 루프입니다. 개인적으로 저는 이 작성 방식만 기억하고(템플릿인지는 확실하지 않음) 이해하지 못한다면 나중에 프로그램을 작성할 때 논리적 구조를 이해할 수 없을 것이라고 생각합니다. 그것이 무엇인지는 알지만 그 이유는 알지 못할 것입니다.
이런 논리적인 관계는 당분간 이해가 되지 않습니다.
안내해주세요!
여기서
class
키워드는 중첩 클래스를 정의하지 않지만sharedInstance
가 클래스 속성임을 나타냅니다. 물론shareInstance
는 위에서 언급한computed property
(계산된 속성)을 의미하지 않습니다. 하지만get-only property
(읽기 전용 속성)입니다.getter
은 이 읽기 전용 속성의struct
(속성을 반환하는 메서드) 내에 정의됩니다. 이struct
안에는 두 개의 정적 속성이 있습니다.onceToken
이 태그라는 것을 알 수 있습니다.dispatch_once
dispatch_once
을 사용하면 GCD에서 일회성 메서드를 실행하는 데 사용되는 함수입니다.dispatch_once
에 전달된 클로저는 한 번만 실행된다는 점만 이해하면 됩니다. 결론적으로Static.instance = TheOneAndOnlyKraken()
입니다. 이 문장은TheOneAndOnlyKraken
의 인스턴스를 초기화한 다음 이 인스턴스를Static
구조의 정적 속성instance
에 할당하고 마지막으로Static.instance!
를 반환합니다. 즉,TheOneAndOnlyKraken
의 인스턴스가 반환됩니다. 그 이유는Static.instance = TheOneAndOnlyKraken()
이 문은 한 번만 실행되며, 앞으로 생성된 인스턴스를 직접 반환하므로 싱글톤이 보장될 수 있기 때문입니다. 이것이 분명합니까?하지만 솔직히 말해서 Swift에서 싱글톤을 작성하는 것이 그렇게 번거로울 필요는 없습니다. 다음과 같습니다:
으아악sharedInstance는 클래스가 아니라 정적 계산된 속성입니다. 이 속성의 유형은
중괄호 안의은 컴퓨팅 속성에 대한 코드입니다. 인스턴스를 생성하는 부분은 dispatch_once
struct ...... return Static.instance!
로 한 번만 실행되도록 보장됩니다.swift 싱글턴에 대한 외국 블로그의 글을 참고하시면 됩니다