我是新来的Swift(我在一个月前了解它),我创建了一个自定义的UICollectionViewCell类,并且我还需要三种类型的UIButtons和其他对象,但我不想写每一个,所以我正在创建一个函数。但是,由于我有三个按钮,函数必须为每个参数准确地使用三个数组。有人可以帮我解释一下包含评论的代码吗?谢谢!如何检查作为UDF参数的数组中的值的数量?
var buttonArray: [UIButton] = []
var checkBoxArray: [UIView] = []
var labelArray: [UILabel] = []
func initializeStuff(objectType: AnyObject, xOriginCgFloat: [CGFloat], yOriginCgFloat: [CGFloat], width: [CGFloat], height: [CGFloat]) {
if xOriginCgFloat != Array() || yOriginCgFloat != Array() || width != Array() || height != Array() {
fatalError("Each CgFloat parameter must be an array.")
} else {
if AnyObject.self == UIButton.self {
if condition { //condition: each array must contain exactly three values
for index in 0..<3 {
var button = UIButton(frame: CGRect.init(origin: CGPoint.init(x: xOriginCgFloat[index], y: yOriginCgFloat[index]), size: CGSize.init(width: width[index], height: height[index])))
buttonArray.append(button)
}
} else {
fatalError("Each array for a button object must have exactly three values.")
}
} else if AnyObject.self == UIView.self {
if condition2 { //condition2: each array must contain exactly two values
for index in 0..<2 {
var checkBox = UIView(frame: CGRect.init(origin: CGPoint.init(x: xOriginCgFloat[index], y: yOriginCgFloat[index]), size: CGSize.init(width: width[index], height: height[index])))
checkBoxArray.append(checkBox)
}
} else {
fatalError("Each array for a view object must have exactly two values.")
}
} else if AnyObject.self == UILabel.self {
if condition3 { //condition3: each array must contain exactly two values
for index in 0..<2 {
var label = UILabel(frame: CGRect.init(origin: CGPoint.init(x: xOriginCgFloat[index], y: yOriginCgFloat[index]), size: CGSize.init(width: width[index], height: height[index])))
labelArray.append(label)
}
} else {
fatalError("Each array for a view object must have exactly two values.")
}
} else {
fatalError("Incorrect type of object; AnyObject parameter must be a UIButton, UIView, or UILabel.")
}
}
}
当你说'if objectType == UIButton.self {'应该将等号运算符改为身份运算符(===),因为Xcode给我一个错误信息==。另外,因为我想为UIButton调用三个值,并且有两个值UIView和UILabel,有没有办法让一个元组具有不同数量的值? – ProgrammingEnthusiast
如何在我的'for'循环中得到元组中三个值中的一个?我也发布了另一个问题。 – ProgrammingEnthusiast
@ProgrammingEnthusiast是:'AnyObject'不是'Equatable',所以我应该使用'==='比较身份而不是'=='。对于那个很抱歉。另外,使用for循环遍历一个元组并不是真的支持。这是可能的,但很混乱。所以如果你想使用for循环方法,那么元组可能不是一个很好的解决方案,你应该坚持使用数组。对不起,不好的建议。 – Robert