我有一个函数长这样:
public final class MyClass {
static let shared = MyClass()
public func doSomething(dictionary: [String: Any]? = nil) async -> UIViewController {
return await UIViewController()
}
}
我在 UIViewController
中这样调用它:
final class MyViewController: UIViewController {
@IBAction private func tapButton() {
Task {
let vc = await MyClass.shared.doSomething()
}
}
}
但是它给了我一个警告:
在调用非隔离实例方法“doSomething(dictionary:)”时,不可发送类型“[String : Any]?”退出主演员隔离上下文,不能跨越演员边界
请注意,您必须将构建设置中的Strict Concurrency Checking
设置为Complete
或Targeted
,才能在Xcode中显示此设置。
我知道UIViewController内部的函数被隔离到MainActor,而我想让tapButton()
也是如此。但是我该怎么做才能避免这个警告呢?
Any
替换为Sendable
。 - Joakim Danielson