
nonisolated를 통해서 actor 안에서 isolated 하지않게 지정할 수 있었다. 이와 정확히 반대 메커니즘이다.A type that represents a globally-unique actor that can be used to isolate various declarations anywhere in the program.
@globalActor 키워드를 붙여준다.static var shared 변수에 할당해주면 된다.@globalActor struct MyGlobalActor {
static var shared = ThisIsActorThatWantToBeUsedAsGlobal()
}@MyGlobalActor 키워드를 붙이는 것으로 앞의 shared에 정의한 actor(ThisIsActor…AsGlobal)에 isolate 하게 할 수 있다.ThisIsActorThatWantToBeUsedAsGlobal 밖에 정의되어 있다고 하자.func getData() {
let data = ["One", "Two", "Three", "Four", "Five"]
self.data = data
}ThisIsActorThatWantToBeUsedAsGlobal 안에 포함시키고자 하면 단순하게 @MyGlobalActor 키워드를 붙여주면 된다.@MyGlobalActor func getData() {
let data = ["One", "Two", "Three", "Four", "Five"]
self.data = data
}MainActor.run() 안에 넣어줬었다.@Published 변수가 있다.class ViewModel: ObservableObject {
@Published var dataArray: [String] = []
} → 이 변수가 변경되는 경우 View에서 UI가 다시 그려지기 때문에 Main thread에서 실행되어야 한다.class ViewModel: ObservableObject {
...
func getData() {
let data = ["One", "Two", "Three", "Four", "Five"]
await MainActor.run {
self.dataArray = data
}
}
}MainActor.run() 에 넣어주기는 너무 번거롭다. 심지어… 이 에러사항은 런타임에만 확인할 수 있다. @MainActor @Published var dataArray: [String] = []@MainActor 키워드를 붙여서 사전에 에러를 확인하자.https://www.youtube.com/watch?v=BRBhMrJj5f4&list=PLwvDm4Vfkdphr2Dl4sY4rS9PLzPdyi8PM&index=11