Swift 5.5.1跨actor调用返回非Sendable类型函数未报错问题咨询
代码问题判定
这段代码是存在明显安全隐患的错误代码:你在actor隔离域外部修改了原本属于actor内部的非线程安全类实例,直接突破了actor的隔离保护,确实违反了SE-0306提案的规定,会产生不可预期的数据竞争问题。
编译未报错的原因
Swift 5.x版本为了兼容旧项目,默认没有开启严格的并发安全校验,你用的Swift 5.5.1是首个支持actor语法的正式版本之一,相关的Sendable校验逻辑默认是关闭状态,需要你手动加编译参数开启校验:
- 加
-warn-concurrency参数编译,会先收到对应的安全警告 - 加
-Xfrontend -strict-concurrency=complete参数编译,会直接抛出编译错误,完全符合提案的约束要求
严格的并发校验规则直到Swift 6才会设为默认开启项,低版本的默认宽松配置才会让你这段不符合规范的代码正常编译运行。
内容的提问来源于stack exchange,提问作者mibu
相关产品推荐
相关产品推荐

