Swift编译报错:Command SwiftCompile返回非零退出码(无语法错误)
问题排查与修复
核心问题1:枚举成员拼写错误
代码里的Constraints枚举存在拼写错误:toWigth应为toWidth,这个错误会导致编译器无法正确解析枚举case,进而触发编译失败。
核心问题2:Switch语句中枚举case缺少前缀.
在Swift 5.8(对应Xcode 14.3)中,跨上下文引用枚举case必须添加.前缀,你的switch语句里所有case都省略了这个前缀,这是编译失败的另一个关键原因。
修正后的完整代码
import Foundation import UIKit enum Constraints<T> { case setTop(to: T, constant: CGFloat = 0) case setBottom(to: T, constant: CGFloat = 0) case setLeading(to: T, constant: CGFloat = 0) case setTrailing(to: T, constant: CGFloat = 0) case toBottom(of: T, constant: CGFloat = 0) case toTop(of: T, constant: CGFloat = 0) case toLeading(of: T, constant: CGFloat = 0) case toTrailing(of: T, constant: CGFloat = 0) case toHeight(of: T, multiplier: CGFloat = 1) case toWidth(of: T, multiplier: CGFloat = 1) // 修复拼写错误 } extension UIView { func applyConstraints(_ constraints: Constraints<UIView>...) { self.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate(constraints.map { constraint in switch constraint { case .setTop(to: let to, constant: let constant): // 添加.前缀 return self.topAnchor.constraint(equalTo: to.topAnchor, constant: constant) case .setBottom(to: let to, constant: let constant): // 添加.前缀 return self.bottomAnchor.constraint(equalTo: to.bottomAnchor, constant: constant) case .setLeading(to: let to, constant: let constant): // 添加.前缀 return self.leadingAnchor.constraint(equalTo: to.leadingAnchor, constant: constant) case .setTrailing(to: let to, constant: let constant): // 添加.前缀 return self.trailingAnchor.constraint(equalTo: to.trailingAnchor, constant: constant) case .toBottom(of: let of, constant: let constant): // 添加.前缀 return self.topAnchor.constraint(equalTo: of.bottomAnchor, constant: constant) case .toTop(of: let of, constant: let constant): // 添加.前缀 return self.bottomAnchor.constraint(equalTo: of.topAnchor, constant: constant) case .toLeading(of: let of, constant: let constant): // 添加.前缀 return self.trailingAnchor.constraint(equalTo: of.leadingAnchor, constant: constant) case .toTrailing(of: let of, constant: let constant): // 添加.前缀 return self.leadingAnchor.constraint(equalTo: of.trailingAnchor, constant: constant) case .toHeight(of: let of, multiplier: let multiplier): // 添加.前缀 return self.heightAnchor.constraint(equalTo: of.heightAnchor, multiplier: multiplier) case .toWidth(of: let of, multiplier: let multiplier): // 添加.前缀+修复拼写 return self.widthAnchor.constraint(equalTo: of.widthAnchor, multiplier: multiplier) } }) } }
额外说明
你的MainVC使用示例代码无需修改,修正上述问题后即可正常编译运行。另外,Xcode 14.3的Swift编译器对语法规范的检查比旧版本更严格,这也是之前能运行但现在报错的原因之一。
内容的提问来源于stack exchange,提问作者Alexey_BH
相关产品推荐
相关产品推荐

