/* Page prose (zh-Hans) */
"ActorIsolation" = "# actor 隔离：外部 `await`，内部同步\n\n再看一眼我们是如何从外部读取余额的：`await ledger.balance`。为什么要 `await`？\n\n因为这个 actor 可能正**忙**着。当你**从外部**调用一个 actor 的方法或读取它的可变状态时，你的任务也许得等待当前在里面的那位完成。那段可能的等待就是一个挂起点，而在 Swift 里每一个挂起点都用 `await` 标记。这就是 **actor 隔离**：actor 的可变状态被*隔离*在 actor 之内，外部的人只能通过 `await` 触及它。\n\n在 actor 内部则不同。运行在 actor *之内*的代码已经把 actor 独占给了自己，所以它**同步地**触碰自己的状态，不需要 `await`。";
"ActorIsolation-2" = "**观察运行：**你会看到 `Balance is now 50`、`Balance is now 75`，然后是 `Read from outside: 75`。注意这个规律：来自 `Task` 的**每一次**访问都需要 `await`；而 `deposit` 或 `report` 内部的访问都不需要。在 actor 内部，你已经排在队伍的最前面了。\n\n---\n\n## `nonisolated`：用于不需要保护的状态\n\n并非 actor 里的一切都会触碰可变状态。一个不可变的 `let` 永远不会变，所以读取它不会产生竞争；没有理由让调用者对它 `await`。把这类成员标记为 **`nonisolated`**，让它们退出隔离：\n\n```swift\nactor Account {\n    let owner: String   // immutable, safe to read anytime\n    private(set) var balance: Int\n\n    init(owner: String, balance: Int) {\n        self.owner = owner\n        self.balance = balance\n    }\n\n    nonisolated var label: String {\n        \"Account for \\(owner)\"   // only reads the immutable `owner`\n    }\n\n    func deposit(_ amount: Int) {\n        balance += amount\n    }\n}\n\nlet account = Account(owner: \"Robin\", balance: 100)\nprint(account.label)   // no await, it's nonisolated\n```\n\n因为 `label` 只读取不可变的 `owner`，它被声明为 `nonisolated`，你可以像普通属性一样调用它，不需要 `await`，也不用等待。要注意的是：一个 `nonisolated` 成员**不可以触碰 actor 的可变状态**。试着在 `label` 内部读取 `balance`，编译器就会拒绝它，因为那次访问*确实*需要保护。那个报错就是隔离规则在让你保持诚实。\n\n> 如果你把 `balance` 加进上面 `label` 的字符串里，编译器会当场拒绝这段代码，因为 `nonisolated` 成员不可以触碰隔离的状态。那个报错是隔离规则在按预期工作，而不是你代码里的 bug。\n\n[上一页](@previous)  |  第 3 / 7 页  |  [下一页: 重入](@next)";
