import RxSwift
class X {
func fff(c: C?) -> () -> Single<Int> {
return { [weak c] in
return Single.create { observer in
print(c?.i)
return Disposables.create()
}
}
}
}
class Y {
weak var c: C?
init(c: C) {
self.c = c
}
}
class C {
var i: Int
init(i: Int) {
self.i = i
}
}
var cObj = C(i: 3)
let yObj = Y(c: cObj)
let xObj = X()
let work = xObj.fff(c: yObj.c)
cObj = C(i: 5)
let after = xObj.fff(c: yObj.c)().subscribe()
- 위치 1에는 [weak c]를 배치할 수 없다. 문법적으로 막혀 있다.
- 위의 코드처럼 위치 2에 [weak c]를 배치하면 work 상수가 c를 약하게 참조한다.
- 따라서 after에 대한 구독 결과로 nil이 출력된다.
- 위치 3에 [weak c]를 배치하면 work 상수가 c를 강하게 참조한다.
- 따라서 after에 대한 구독 결과로 Optional(3)이 출력된다.