当我试图定义一个符合protocol
的actor
时,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
}
}
1条答案
按热度按时间rlcwz9us1#
如果您点击错误消息前面的“自动修复”按钮,它将展开并显示两个选项:
简而言之,您可以:
nonisolated
添加到foo()
,使此示例方法不与参与者隔离:foo()
async
以允许参与者隔离符合性:简而言之,协议需要知道该方法是否可以跨参与者边界同步调用(即,它是否是非隔离的)。
您询问是否可以使用
nonisolated
:如果我这样做,我会失去什么?
如果它是
nonisolated
,则该方法不能直接访问操作符隔离的属性,也不能调用操作符隔离的方法。简而言之,如果一个方法不需要参与者隔离,那么您通常可以随意将其标记为
nonisolated
。