-1

我注意到从 Swift 5.5 开始,一些基于 UI 的类改变了它们在处理并发方面的行为。我有一个特定的框架,它封装了一些 UIKit 功能/逻辑,并且我能够在没有任何警告的情况下构建框架,但是当我想在我的应用程序中使用该框架时,一些编译器警告会出现在“arm64-apple-ios”文件中。目前编译器错误发生在一些以闭包作为参数的初始化程序中。

这是一个小摘录:

@_Concurrency.MainActor(unsafe) public init(configurationForConnectingSceneSession: @escaping (UIKit.UIApplication, UIKit.UISceneSession, UIKit.UIScene.ConnectionOptions) -> UIKit.UISceneConfiguration = { _, connectingSceneSession, _ in
        UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)

        /* COMPILER ERROR 1 -> Call to main actor-isolated initializer 'init(name:sessionRole:)' in a synchronous nonisolated context, COMPILER ERROR 2 -> Property 'role' isolated to global actor 'MainActor' can not be referenced from a non-isolated synchronous context*/

    }, didDiscardSceneSessions: @escaping (UIKit.UIApplication, Swift.Set<UIKit.UISceneSession>) -> Oodin_Base.Executable = { _,_ in NoAction() })

任何想法如何解决这个问题?

4

1 回答 1

0

通过将“@MainActor”添加到我的闭包中,我能够解决编译错误。

public init(
    configurationForConnectingSceneSession: @MainActor @escaping (UIApplication, UISceneSession, UIScene.ConnectionOptions) -> UISceneConfiguration = { _, connectingSceneSession, _ in
        UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    },
    didDiscardSceneSessions: @escaping (UIApplication, Set<UISceneSession>) -> Executable = { _,_ in NoAction() }
)
于 2021-12-30T10:49:14.567 回答