Ios 任何对象&;无法分配给类型为';CGFloat&x27;
我有两个示例函数。两者的作用完全相同。区别在于变量“objectName”的类型 第一部作品。我是特定的,并将类型设置为UILabel。显然,我只能将它用于UILabel类型的对象,并且为每种类型重新创建函数非常难看Ios 任何对象&;无法分配给类型为';CGFloat&x27;,ios,swift,cgfloat,anyobject,Ios,Swift,Cgfloat,Anyobject,我有两个示例函数。两者的作用完全相同。区别在于变量“objectName”的类型 第一部作品。我是特定的,并将类型设置为UILabel。显然,我只能将它用于UILabel类型的对象,并且为每种类型重新创建函数非常难看 func _setUILabelTop(objectName: UILabel, location: CGFloat, offset: CGFloat) { let originalBottom = objectName.frame.origin.y + objectNam
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
}
我的问题:
请温柔一点,我使用XCode和Swift才几天,这也是我的第一篇StackOverflow帖子。=) 为任何对象设置顶部位置没有意义,因为并非所有对象都具有此属性-例如
NSString
。但是,您可以通过使用UIView
而不是AnyObject
来获得所需的行为,因为几乎(如果不是)所有UIKit
控件都源自此类
func _setTop(forView view: UIView, location: CGFloat, offset: CGFloat) {
let originalBottom = view.frame.origin.y + view.frame.size.height
view.frame.origin.y = location + offset
view.frame.size.height = originalBottom - view.frame.origin.y
}
关于计算,您可以优化原始底部的计算:
let originalBottom = view.frame.maxY