我想合并NSLayoutDimension
NSLayoutXAxisAnchor
和NSLayoutYAxisAnchor
来为锚创建一个包装器,以避免一长串便捷方法
我正在寻找的理想语法是
extension UIView {
func example() {
attach("width" to:view, "height")
}
func attach(_ value:String to view:UIView, _ otherValue:String) -> NSLayoutConstraint {
let firstAnchor = anchor(for:value)
let secondAnchor = anchor(for:otherValue)
return firstAnchor.match(view.secondAnchor)
}
// My original expectation for generics
func anchor<A: NSLayoutAnchor<AnyObject>>(for string:String) -> A {
switch string {
case "height":
return heightAnchor
default:
return widthAnchor
}
// etc....
}
extension NSLayoutAnchor {
func match(_ anchor:NSLayoutAnchor) -> NSLayoutConstraint {
return constraint(equalTo: view.anchor)
}
}
我似乎最接近的人是...
func equivalent(_ dimension: NSLayoutDimension) -> NSLayoutDimension {
switch dimension {
case heightAnchor:
return heightAnchor
default:
return widthAnchor
}
}
但是在这里我有点迷路了……这实际上并没有取得太大的成就……理想情况下,我想将所有的Anchors放在一个位置,即展开equivalent
,以便我可以根据相同的查询轻松访问锚点。
NSLayoutAttribute
可能是这样
func attribute(for string:String) -> NSLayoutAttribute {
switch string {
case "left":
return .left
case "right":
return .right
但是它不能与泛型一起使用,因为上面有它们……我知道语法是错误的,并且锚点是UIView
上的属性,但是我不确定如何解决。 ..
感谢您的时间