我是Swift的新手,我开始制作我的宠物项目。我正在以编程方式构建UIKit用户界面,一切都很好。从某个时刻开始(我不明白到底发生了什么),Xcode开始告诉我“Command SwiftCompile failed with a nonzero exit code”,但它并没有告诉我语法不正确。
我发现这个扩展导致了这个问题:
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 toWigth(of: T, multiplier: CGFloat = 1)
}
extension UIView {
func applyConstraints(_ constraints: Constraints<UIView>...) {
self.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate(constraints.map {
switch $0 {
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 toWigth(of: let of, multiplier: let multiplier):
return self.widthAnchor.constraint(equalTo: of.widthAnchor, multiplier: multiplier)
}
})
}
}
我使用它来减少布局代码:
class MainVC: UIViewController {
let searchAreaContainer = UIView()
let tabBarContainer = UIView()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
view.addSubview(searchAreaContainer)
searchAreaContainer.applyConstraints(
.setTop(to: view),
.setLeading(to: view),
.setTrailing(to: view),
.toHeight(of: view, multiplier: 0.06)
)
view.addSubview(tabBarContainer)
tabBarContainer.applyConstraints(
.setBottom(to: view),
.setLeading(to: view),
.setTrailing(to: view),
.toBottom(of: searchAreaContainer)
)
}
}
这很奇怪,因为没有语法错误(Xcode没有告诉他们)。一段时间前,它工作正常。有人能帮我解释一下是什么导致了这一切吗?我使用的MacBook Pro 2023具有M2 Max CPU,32 Gb RAM和Xcode版本14.3(14E222b),在MacOs Ventura 13.3.1(a)(22E772610a)上运行。
如果这个问题不是由代码引起的,我可以发送一个URL到GitHub。谢谢你。
问题肯定是由UIView扩展引起的:
- 我试图清理Build文件夹,重新启动Xcode并重新启动...没有什么帮助。
- 如果将通用替换为UIView,问题仍然存在。
- 如果留下一个案例,问题仍然存在
1条答案
按热度按时间snvhrwxg1#
修复switch语句,使其具有
.
语法。这是你的代码应该看起来像,我还修复了你的toWidth错字。