【问题标题】:super.init() couldn't be called in swift3super.init() 无法在 swift3 中调用
【发布时间】:2016-11-07 05:23:22
【问题描述】:

super.init()被调用时,报错:

必须调用超类“UICollectionViewCell”的指定初始化程序。

当我在 swift 2.2 版中使用它时,它确实工作得很好。

但是一旦我将 Xcode 版本升级到 8.0,我一直在使用 Swift 3.0 版本并且super.init() 不适合我。

【问题讨论】:

    标签: ios swift swift3 uicollectionviewcell


    【解决方案1】:

    从 swift3 开始,他们已经删除了 UICollectionViewCell 的 init()。所以你必须使用 super.init(frame: CGRect) 而不是普通的 init()。

    【讨论】:

      【解决方案2】:

      你可以使用 super.init(frame: CGRectZero)

      【讨论】:

        【解决方案3】:

        你可以使用便捷初始化器代替指定初始化器

        Swift 有三个关于指定初始化器和便利初始化器如何相互关联的规则。我不想解释它们,而是直接引用 Apple 的 iBook:

        1) 指定初始化程序必须从其直接超类调用指定初始化程序。

        2) 便利构造器必须调用同一个类的另一个构造器。

        3) 便利构造器最终必须调用指定构造器。

        摘自:Apple Inc. “Swift 编程语言”。电子书。 https://itun.es/us/jEUH0.l

        代替

        init() {
        
            super.init()
        }
        

        你可以使用

        convenience init() {
        
            self.init()
        }
        

        【讨论】:

          【解决方案4】:

          您只需要按照错误消息中的说明调用指定的初始化程序即可。
          指定的初始化器是public init(style: UITableViewCellStyle, reuseIdentifier: String?):

          // Designated initializer.  If the cell can be reused, you must pass in a reuse identifier.  You should use the same reuse identifier for all cells of the same form.  
          @available(iOS 3.0, *)
          public init(style: UITableViewCellStyle, reuseIdentifier: String?)
          

          所以你需要调用类似的东西:

          self.init(style: UITableViewCellStyle.default, reuseIdentifier: "myIdentifier")
          

          super.init(style: UITableViewCellStyle.default, reuseIdentifier: "myIdentifier")
          

          而不是super.init()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-07-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-06
            • 2015-07-05
            • 2021-12-22
            相关资源
            最近更新 更多