You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用@ModelActor在后台线程执行SwiftData操作?

如何在后台线程使用SwiftData的@ModelActor执行操作?
  • 我不清楚如何在后台线程执行SwiftData操作,每次调用我的@ModelActor时,所有代码都运行在主线程。
  • 我在网上看到必须在后台线程实例化它,但实例化后它的方法仍在主线程执行,查阅executor相关内容也没找到可行方案。

代码运行在主线程

编辑:似乎在.task {}中调用MainActor是问题根源?

以下是我的代码:

import SwiftUI
import SwiftData

@Model
class User {
    var id: UUID
    
    init(id: UUID) {
        self.id = id
    }
}

@MainActor
final class SomeMainActor {}

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .task {
                    do {
                        let savedUserProvider = try await SavedUserProvider.createOnBackground()
                        let someMainActor = SomeMainActor()
                        await savedUserProvider.updateUser()
                    } catch {}
                }
        }
    }
}

@ModelActor
actor SavedUserProvider {
    static func createOnBackground() async throws -> SavedUserProvider {
        await Task.detached(priority: .background) {
            let container: ModelContainer = {
                let schema = Schema([
                    User.self
                ])
                let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
                
                do {
                    return try ModelContainer(for: schema, configurations: [modelConfiguration])
                } catch {
                    fatalError("Could not create ModelContainer: \(error)")
                }
            }()
            
            return SavedUserProvider(modelContainer: container)
        }.value
    }
    
    func updateUser() {
        print()
        // Runs on main thread
    }
}

有没有人成功使用ModelActor在后台线程完成SwiftData更新?

内容的提问来源于stack exchange,提问作者Xys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:42:18