SwiftUI手势报错:函数声明不透明返回类型但返回类型不匹配如何解决?
问题根源
你的代码里pinchGesture()使用了不透明返回类型some Gesture,但Swift要求这个类型必须是单一的具体类型。而你的两个分支返回的手势(zoomGesture()的返回类型,和修改后的MagnificationGesture)大概率是不同的具体类型,导致编译器无法统一推断,所以报错。
解决方案
把函数返回类型改为AnyGesture,并将两个分支的手势都用AnyGesture()包裹,通过类型擦除统一返回类型:
修改后的代码:
@State private var steadyStateEmojiZoomScale: CGFloat = 1 @GestureState private var emojiZoomScale: CGFloat = 1 private func pinchGesture() -> AnyGesture { if selectedEmojis.count == 0 { return AnyGesture(zoomGesture()) } else { return AnyGesture( MagnificationGesture() .updating($emojiZoomScale) { latestGestureScale, emojiZoomScale, _ in emojiZoomScale = latestGestureScale } .onEnded { gestureScaleAtEnd in steadyStateEmojiZoomScale *= gestureScaleAtEnd } ) } }
为什么之前用AnyGesture没生效?
大概率是你没有修改函数的返回类型(依然用some Gesture),或者只包装了其中一个分支。只有明确返回AnyGesture,并让两个分支都返回被擦除类型后的手势,编译器才能识别统一的返回类型,解决类型不匹配的问题。
内容的提问来源于stack exchange,提问作者Real Analysis Noob
相关产品推荐
相关产品推荐

