Swift 5.5 [Swift 5.5] Actor

[Swift 5.5] Actor

Reference type 이다.
스레드의 모델(MVVM 처럼 뷰-뷰모델을 만드는 것과 유사하다)

Actor

  • 한 번에 하나의 작업만 변경 가능한 상태에 액세스할 수 있도록 허용해 엑세스 할 수 있도록 허용함으로 안전하다.
  • 스레드의 안전성을 보장하기 위해 동시 하나의 Task 에 접근 보장한다.
actor TemperatureLogger {
    let label: String
    var measurements: [Int]
    private(set) var max: Int

    init(label: String, measurement: Int) {
        self.label = label
        self.measurements = [measurement]
        self.max = measurement
    }
}
let logger = TemperatureLogger(label: "Outdoors", measurement: 25)
print(await logger.max)
// Prints "25"
  • max 변수을 외부에서 접근 -> await 를 사용해주어야 한다.
extension TemperatureLogger {
    func update(with measurement: Int) {
        measurements.append(measurement)
        if measurement > max {
            max = measurement
        }
    }
}
  • max update

- 클래스에서 액터 외부에서 max 를에 접근하면 컴파일 오류가 발생한다고 합니다. * 액터의 로컬 상태에 엑세스 할수 있도록 보장한다고 하고 이를 actor isolation. 라고 합니다. * 도데체 뭔말이야 다시 정리 필요!!

@MainActor

  • SwiftUI 의 Published 설정하는 코드 는 MainActor 스레드 에서 실행되어야 한다.

참고:

댓글남기기