SwiftUI中.gesture()参数非可选却可传nil的原因咨询
为什么SwiftUI中
.gesture(condition ? DragGesture() : nil)能正常运行? 核心原因是SwiftUI的.gesture修饰符有两个重载版本:
- 一个要求传入非可选的
Gesture类型实例 - 另一个支持传入可选的
Gesture?类型
你的三元表达式condition ? DragGesture() : nil会被Swift自动推断为可选手势类型DragGesture?——因为表达式一边是具体的手势实例,另一边是nil,Swift会把整个表达式的类型统一成可选类型。
此时编译器会自动匹配到接受可选参数的那个.gesture重载,这个重载内部已经处理了nil的情况:当传入nil时,就相当于不给视图添加任何手势,所以代码能正常运行。
至于你收到的错误提示,大概率是编译器的临时类型推断误判,或者代码上下文的其他因素干扰了类型分析,但实际运行时Swift的类型系统会正确识别表达式类型并匹配对应重载。
内容的提问来源于stack exchange,提问作者storybored
相关产品推荐
相关产品推荐

