Как мне назвать асинхронную функцию на главном актере?IOS

Программируем под IOS
Ответить
Anonymous
 Как мне назвать асинхронную функцию на главном актере?

Сообщение Anonymous »

ОК ... поэтому я хочу вызвать асинхронную функцию в моей функции .onapear

Код: Выделить всё

import SwiftUI
import RealityKit
import RealityKitContent
import MyFoo

struct ContentView: View {

@Environment(MyFoo.self) private var foo: MyFoo

@State private var message : String?

var body: some View {
VStack {
Model3D(
named: "Scene",
bundle: realityKitContentBundle
).padding(.bottom, 50)

if let msg = self.message {
Text(msg)
} else {
Text("No message yet.")
}
}
.padding()
.onAppear(perform: connectToMyFoo)
}

@MainActor
private func connectToMyFoo() {
DispatchQueue.main.async {
Task {
await self.foo.initialize()
// ...
}
}
}
}
Но Swift мне не позволит. синхронное закрытие. Затем, если я попытаюсь запустить задачу в этом, чтобы обойти ее, она теряет изоляцию и жалуется, что < /p>

Прохождение аргумента не поддающегося типа 'myfoo' Вне основного актера, изолированного контекстом, может вводить расы данных; Это ошибка в языковом режиме Swift 6

Сообщение, которое я растут о том, как я потратил гораздо больше времени, чем я хотел бы признать, пытаясь заставить его уйти. ) в главном актере изолят , когда весь кровавый язык не хочет сотрудничать?!
запустить foo.initialize () . Сделайте это на главном актере. Подождите, пока это не будет сделано. Это не должно быть так чертовски тяжело.

Подробнее здесь: https://stackoverflow.com/questions/794 ... main-actor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»