为何Swift未对传入不同Task的非Sendable全局变量发出警告?
Swift并发警告未按预期触发
以下是测试代码:
class Cat { var name = "Tom" } class Globals { var cat = Cat() } let glob = Globals() func one () { Task {glob.cat.name="Max"} // 预期警告:非Sendable对象进入不同并发域 }
通常启用-warn-concurrency选项后,Swift/Xcode会针对跨并发域的非Sendable类型发出警告。
按逻辑来说,传入Task的闭包必须是@Sendable闭包,而@Sendable闭包仅能捕获Sendable类型。但Globals并非Sendable类型,我预期会收到如下警告:
Capture of 'glob' with non-sendable type 'Globals' in a
@Sendableclosure
但实际并未触发该警告。
内容的提问来源于stack exchange,提问作者JMC
相关产品推荐
相关产品推荐

