我有一个自动布局便利功能,可以将视图叠加在一起。对于我的间距参数,我想允许:
CGFloat
(所有视图均匀分布)CGFloat
s的数组(视图之间的不同空格)但是,我不确定如何定义这个论点。
// Ambiguous
func myconstrainer(_ views : [UIView], spacing : CGFloat = 0){}
func myconstrainer(_ views : [UIView], spacing : [CGFloat]? = nil){}
// Messy
func myconstrainer(_ views : [UIView], spacingA : CGFloat = 0, spacingB: [CGFloat]? = nil){}
答案 0 :(得分:2)
我将如何做到这一点:
myconstrainer([view1, view2, view3], spacing: 123.0)
myconstrainer([view1, view2, view3], spacings: [1, 2, 3])
致电网站:
docker pull microsoft/windowsservercore:10.0.14393.321
docker tag microsoft/windowsservercore:10.0.14393.321 microsoft/windowsservercore
docker run microsoft/windowsservercore hostname
69c7de26ea48
答案 1 :(得分:2)
如果没有诉诸泛型,这将带来(我认为不必要的)复杂性的世界,你不能做你想做的事情,因为需要定义参数的类型以从类型安全中获益Swift是旨在提供。
为什么不简单地将间距定义为CGFloats数组(如第二个声明中所示),如果spacing.count == 1,则默认为第一种情况?
func myconstrainer(_ views : [UIView], spacing : [CGFloat]?) {
if spacing.count == 1 {
// all views spaced evenly code
}
else {
// different spaces between views code
}
}
PS(您不需要将可选参数设置为nil)
答案 2 :(得分:2)
你也可以尝试可变数量的参数:
func myconstrainer(_ views: [UIView], spacing: CGFloat...) {
myconstrainer(views, spacing: spacing)
}
并提供一个简单的重载来处理数组:
func myconstrainer(_ views: [UIView], spacing: [CGFloat]) {
// Implementation...
}
因此,当使用偶数间距时,您不需要在括号中放置单个元素。
致电网站:
myconstrainer([view1, view2, view3])
myconstrainer([view1, view2, view3], spacing: 123)
myconstrainer([view1, view2, view3], spacings: 1, 2, 3)
myconstrainer([view1, view2, view3], spacings: [1, 2, 3])
一些非明显的注释:
CGFloat...
可以很好地覆盖默认情况;