Swift 에서 Rx 클로저를 반환하는 함수의 파라미터 weak 참조하기

Wonil Lee·2024년 6월 19일
0
import RxSwift

class X {

    func fff(c: C?) -> () -> Single<Int> { // 위치 1
        return { [weak c] in // 위치 2
            return Single.create { observer in // 위치 3

                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)이 출력된다.
profile
DEV WITH APPLE

0개의 댓글