Xcode未触发闭包self显式使用预期错误,构建异常成功
问题原因解析
你遇到的现象是Swift编译器的正常行为,核心原因在于闭包内的guard let self = self操作:
- 首先
[weak self]让闭包以弱引用方式捕获可选类型的self - 而
guard let self = self会在闭包内部创建一个非可选的局部常量self,这个变量是当前类实例的强引用,作用域仅限guard语句之后的代码块 - 在这个局部作用域中,编译器能明确推断出
foo就是该局部self的属性,不存在捕获语义的歧义,因此允许省略self.前缀,不会触发你预期的错误
如果希望强制要求闭包内必须显式写self.,可以在项目的Build Settings中找到**"Require Explicit Self in Closures"**选项(对应编译标记-warn-implicit-self-in-closures),开启后即使是这种绑定后的场景,也会触发警告或错误(具体取决于你设置的警告级别)。
内容的提问来源于stack exchange,提问作者user3151675
相关产品推荐
相关产品推荐

