【问题标题】:Cannot assign a value of type CGFloat to a value of type CGFloat无法将 CGFloat 类型的值分配给 CGFloat 类型的值
【发布时间】:2015-04-17 18:41:36
【问题描述】:

我在尝试设置 CAShapeLayer 的 zPosition 时遇到错误。代码如下:

self.view.layer.sublayers[l].zPosition = CGFloat(1)

由于某种原因,我收到此错误:Cannot assign a value of type CGFloat to a value of type CGFloat!。出于某种原因,错误是与可选的。我在网上看到其他示例没有任何强制转换 (zPosition = 1),所以我不知道这里有什么问题。

谢谢!

【问题讨论】:

    标签: swift casting calayer


    【解决方案1】:

    CALayersublayers 属性定义为[AnyObject]!。当您下标为...sublayers[l] 时,您将得到一个AnyObject,可以肯定的是,它没有zPosition 的可设置属性。您需要将返回的AnyObject 向下转换为CALayer,例如

    if let layer = self.view.layer.sublayers[l] as? CALayer {
      layer.zPosition = CGFloat(1)
    }
    

    另外,您不需要解包 sublayers(在下标之前),因为它是用 ! 声明的,因此会隐式自动解包。

    最后,您引用的错误消息似乎是错误复制的,因为它是荒谬的。

    【讨论】:

    • 糟糕,复制错误。我修好了。
    【解决方案2】:

    sublayers 被定义为 AnyObject 的可选数组。因此,您必须解开子层。以下应该有效:

    self.view.sublayers![l].zPosition = CGFloat(1)
    

    【讨论】:

    • 是的..你是对的..对不起那个。 @GoZoner 做对了 =)
    • 别担心!感谢您花时间回答。
    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多