Swift中用Property Wrapper遇Xcode14报错:表达式类型模糊需更多上下文
解决Xcode14中Property Wrapper在闭包内初始化的类型歧义错误
你遇到的Type of expression is ambiguous without more context错误,是因为Xcode14的Swift编译器在闭包内部处理带泛型的Property Wrapper时,类型推断存在局限——虽然你指定了变量progress的类型为CGFloat,但编译器无法将其与@Clamping(0...1)的泛型参数关联,导致无法确定Clamping的具体类型。
解决方案
有两种简单的修复方式:
1. 显式指定Property Wrapper的泛型类型
直接在Clamping后标注泛型类型<CGFloat>,明确告知编译器泛型参数:
var dragGesture: some Gesture { DragGesture() .onChanged { value in @Clamping<CGFloat>(0...1) var progress: CGFloat = (120 + value.translation.width) / 120 updateSampleView(progress: progress) } }
2. 调整初始化器调用方式,显式传递wrappedValue参数
通过命名参数传递初始值,让编译器从初始值类型推断泛型参数:
var dragGesture: some Gesture { DragGesture() .onChanged { value in @Clamping(wrappedValue: (120 + value.translation.width) / 120, 0...1) var progress: CGFloat updateSampleView(progress: progress) } }
补充说明
该问题仅存在于Xcode14对应的Swift版本中,后续Xcode15及以上版本对闭包内Property Wrapper的类型推断逻辑做了优化,基本不会再出现此类问题。若需兼容Xcode14,使用上述任一方法即可解决。
内容的提问来源于stack exchange,提问作者Amirca
相关产品推荐
相关产品推荐

