[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 스레드 에서 실행되어야 한다.
참고:
댓글남기기