Swift에서closure의 순환 인용 기록
1. controller 정의: Test Controller 및 다음 코드 추가
class TestController: UIViewController {
typealias TestClosure = () -> ()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
}
deinit {
print(self, #function)
}
// MARK: - private property
private var name: String = "sdf"
private var closure: TestClosure?
}
그런 다음 테스트를 위한 방법을 추가합니다.
func test() {
let closure: TestClosure = {
self.name = ""
}
closure()
}
순환 참조 없음
closure name, self closure,
func test2() {
let closure: TestClosure = {
self.name = ""
}
closure()
self.closure = closure
}
회의
closure name,self closure,
func test3() {
let closure: TestClosure = {[weak self] in
let closure1: TestClosure = {
self?.name = "dddd"
}
closure1()
}
closure()
self.closure = closure
}
할 줄 모르다
closure [weak self] , closure self ,
closure1 [weak self] , self closure self
func test4() {
let closure: TestClosure = {
let closure1: TestClosure = { [weak self] in
self?.name = "dddd"
}
closure1()
}
closure()
self.closure = closure
}
회의
closure [weak self] , closure self ,
closure1 [weak self] , self closure self
결론:
closure
에서 인용했지만 self.
인용하지 않았다면self
인용하지 않았다면closure
순환 인용이 일어나지 않았을 것이다. 만약self
인용이 있었다면closure
이럴 때[weak self]
또는 [unowned self]
수식이 필요하다. 만약에 여러 층closure
이 끼워져 있다면 가장 바깥쪽closure
에서 수식self
해야 한다. 그렇지 않으면 순환 인용이 발생할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.