我有两个示例函数。两者都做同样的事情。区别在于变量“objectName”的类型。
第一个作品。我很具体并将类型设置为 UILabel。显然,我只能将它与 UILabel 类型对象一起使用,并且为每种类型重新创建函数只是丑陋的。
func _setUILabelTop(objectName: UILabel, location: CGFloat, offset: CGFloat) {
let originalBottom = objectName.frame.origin.y + objectName.frame.size.height
objectName.frame.origin.y = location + offset
objectName.frame.size.height = originalBottom - objectName.frame.origin.y
}
第二个不起作用。使用了 AnyObject 并且 XCode 在函数的第 2 行和第 3 行给了我一个错误。它突出显示带有错误的文本objectName.frame:无法分配给“CGFloat”类型的不可变表达式
func _setObjectTop(objectName: AnyObject, location: CGFloat, offset: CGFloat) {
let originalBottom = objectName.frame.origin.y + objectName.frame.size.height
objectName.frame.origin.y = location + offset
objectName.frame.size.height = originalBottom - objectName.frame.origin.y
}
我的问题:
- 是否存在允许 UILabel、UIButton、MKMapView 的对象类型
- 有没有更好的方法来单独指定 Top、Bottom、Left 或 Right 属性,而无需计算宽度?
请温柔一点,我只使用 XCode 和 Swift 几天,这也是我的第一篇 StackOverflow 帖子。=)