Jos*_*oid 14 actor swift swift-protocols
当我尝试定义actor
符合 a 的an 时protocol
,Xcode 给出错误Actor-isolated instance method 'foo()' cannot be used to satisfy nonisolated protocol requirement
。nonisolated
我可以实现我认为我不想做的功能。我需要吗?如果我这样做的话我会失去什么?
这是导致错误的示例代码:
protocol Fooable {
func foo() -> Int
}
actor Bar: Fooable { // Error: Actor-isolated instance method...
func foo() -> Int {
return 42
}
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*Rob 16
如果您点击错误消息前面的 \xe2\x80\x9cauto fix\xe2\x80\x9d 按钮,它将展开以显示两个选项:
\n\n简而言之,您可以:
\n添加nonisolated
以foo()
使该实例方法不与参与者隔离:
protocol Fooable {\n func foo() -> Int\n}\n\nactor Bar: Fooable {\n nonisolated func foo() -> Int {\n return 42\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n标记协议要求foo()
async
以允许参与者隔离的一致性:
protocol Fooable {\n func foo() async -> Int\n}\n\nactor Bar: Fooable {\n func foo() -> Int {\n return 42\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n简而言之,协议需要知道该方法是否可以跨参与者边界同步调用(即是否是非隔离的)。
\n您询问是否可以使用 nonisolated
:
\n\n如果我这样做的话我会失去什么?
\n
如果是nonisolated
,则该方法根本无法直接访问参与者隔离的属性,也不能调用参与者隔离的方法。按照目前的方法,您可以安全地完成它nonisolated
。
简而言之,如果一个方法不需要参与者隔离,那么您通常应该随意将其标记为nonisolated
。
归档时间: |
|
查看次数: |
6888 次 |
最近记录: |