【问题标题】:CGSize is not accepting `.zero`. Ambiguous use of 'init(width:height:)'CGSize 不接受 `.zero`。 'init(width:height:)' 的模糊使用
【发布时间】:2019-12-18 14:48:35
【问题描述】:

UICollectionViewDelegateFlowLayout我使用时:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: 0, height: 0)
}

效果很好。

但是当我尝试时:

CGSize(width: .zero, height: .zero)

显示错误为:

'init(width:height:)'的模糊使用

事实上:

CGSize(width: .zero, height: 0)

也可以。它只是将两者都添加为.zero 不起作用。

【问题讨论】:

    标签: swift xcode uicollectionview uicollectionviewlayout cgsize


    【解决方案1】:

    语法

    CGSize(width: .zero, height: 0)
    

    即使有效也不推荐。


    .zeroCGSize的静态变量,可以正常使用

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize.zero
    }
    

    甚至

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return .zero
    }
    

    【讨论】:

      【解决方案2】:

      CGSize.init(width:height:) 有三个版本:Double、CGFloat 和 Int。所有这三个都有一个.zero 静态方法。所以当你传递(.zero, .zero) 时,Xcode 不知道要调用哪个版本。

      当您传递0 时,这是一个整数文字。任何符合 ExpressibleByIntegerLiteral 的东西都可以使用它来初始化。这包括所有的 Int 和 UInt 类型(UInt8、Int16 等),还包括浮点类型(Float、Double)、NSNumber 等基础类型,甚至是 RealityKit 中的 MaterialScalarParameter。但斯威夫特偏爱 Int。例如:

      let x = 0
      

      这里,x 是 Int,尽管这在技术上是模棱两可的。 Swift 通常不喜欢一种类型而不是另一种类型,但它对文字有特殊情况。不过,它没有像 .zero 这样的静态方法的特殊情况。

      所以对于CGSize(width: 0, height: 0),它使用 Int 版本,因为您传递整数文字。 CGSize(width: .zero, height: 0),也使用 Int 版本,因为 height 参数是一个文字并且 Int.zero 存在,所以它可以工作。但是对于CGSize(width: .zero, height: .zero),Swift 不知道要调用哪个.zero

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-09
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        • 2020-08-20
        • 1970-01-01
        • 2017-01-31
        相关资源
        最近更新 更多