SwiftUI中View扩展加where限定条件后调用触发Xcode Preview崩溃
问题根因
- 该问题为Xcode 12.2配套的SwiftUI运行时在macOS 10.15版本上的已知缺陷:此版本运行时对
View扩展使用where Self == 具体视图类型的同类型限定语法支持存在问题,方法派发过程中会出现寻址错误,触发预览或运行崩溃。 - 你编写的语法本身符合Swift规范,在Xcode 13及以上版本、部署目标≥ macOS 11 / iOS 14的环境下可正常运行。
兼容旧环境的修改方案
方案一:调整扩展限定规则
将View扩展的限定条件修改为where Self: FooView,或者直接对FooView类型做扩展,两种写法均可保留「仅FooView可调用standard()」的限制,同时适配旧版本运行时:
// 直接扩展FooView(更简洁) extension FooView { func standard() -> some View { self .frame(width: 200, height: 50) } } // 或修改View扩展的限定符 extension View where Self: FooView { func standard() -> some View { self .frame(width: 200, height: 50) } }
修改后原有调用逻辑无需改动,即可正常在Xcode 12.2 + macOS 10.15.7环境下运行和预览。
方案二:升级开发环境
若无兼容macOS 10.15的需求,将Xcode升级到13及以上版本,部署目标设置为macOS 11及以上,原有代码无需修改即可正常运行。
内容的提问来源于stack exchange,提问作者hopy
相关产品推荐
相关产品推荐

