Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 任何对象&;无法分配给类型为';CGFloat&x27;_Ios_Swift_Cgfloat_Anyobject - Fatal编程技术网

Ios 任何对象&;无法分配给类型为';CGFloat&x27;

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

我有两个示例函数。两者的作用完全相同。区别在于变量“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的对象类型
  • 有没有更好的方法来指定顶部、底部、左侧或右侧 属性,而不必计算宽度

  • 请温柔一点,我使用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