Xcode 14.2预览报错‘@objc仅可用于类扩展’的解决咨询
解决Xcode 14.2 SwiftUI+OC混合开发预览报错及文本截断问题
一、修复@objc语法错误,恢复预览功能
你遇到的@objc can only be applied to an extension of a class和Expected type name in extension declaration错误,核心是@objc的使用逻辑错误:
- @objc只能标记类的扩展,不能给SwiftUI的View结构体(值类型)加@objc扩展,更不能写
@objc extension class这种语法错误的代码。 - 正确做法是把OC交互逻辑放在专门的类中,再给这个类加@objc扩展:
// 定义管理SwiftUI状态的类,用于和OC交互 class TextUpdateManager: ObservableObject { @Published var fourLinesText: String = "" } // 给类加@objc扩展,暴露方法给OC调用 @objc extension TextUpdateManager { @objc func updateTextFromOC(_ newText: String) { // 必须切主线程更新SwiftUI状态 DispatchQueue.main.async { self.fourLinesText = newText } } } - 删除所有错误的
@Objc extension class代码,替换为上述正确写法,先解决所有语法错误。 - 修正预览代码,确保预览不依赖错误代码:
struct YourContentView_Previews: PreviewProvider { static var previews: some View { YourContentView() .environmentObject(TextUpdateManager()) } } - 重新编译后,预览即可正常加载。
二、解决iPhone 8上fourLinesText文本截断问题
预览恢复后,切换到iPhone 8设备预览,针对文本截断可采用以下方案:
- 让文本自动换行并自适应高度:
Text(fourLinesText) .fixedSize(horizontal: false, vertical: true) // 允许垂直方向自动扩展 .lineSpacing(6) // 调整行间距提升可读性 .padding(.horizontal) - 若文本过长,可包裹在滚动视图中:
ScrollView { Text(fourLinesText) .lineSpacing(6) .padding(.horizontal) }
内容的提问来源于stack exchange,提问作者Summer
相关产品推荐
相关产品推荐

