【问题标题】:nil is the only return value permitted in initializer?nil 是初始化程序中唯一允许的返回值吗?
【发布时间】:2016-07-04 19:21:55
【问题描述】:

我正在尝试对 UICollectionViewFlowLayout 进行子类化,但我收到错误消息:“nil 是初始化程序中唯一允许的返回值。”我试图检查超类是否有初始化程序,如果没有,我将返回 nil,但是,我收到另一个错误,说 self 是不可变的。

import UIKit

class CollectionViewSpringLayout: UICollectionViewFlowLayout {
    var dynamicAnimator: UIDynamicAnimator?
    override init() {


        self.minimumInteritemSpacing = 10
        self.minimumInteritemSpacing = 10
        //self.itemSize = CGSizeMake(44, 44)
        self.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10)
        self.dynamicAnimator = UIDynamicAnimator(collectionViewLayout: self)
        return self
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

【问题讨论】:

  • 在 Swift 中你不需要return self
  • 天哪,我一直把 obj-c 和 swift 搞混了..
  • 在 Obj-C 中 - (instancetype)init 是一个方法,需要一个返回值。在 Swift 中,初始化器是特殊的,它们不是普通的函数 :)
  • 除了问的问题,你还缺少super.init()

标签: ios swift uicollectionview


【解决方案1】:

正如 cmets 中提到的 @jtbandes,您不应该调用 return selfSwift-book 状态:

与 Objective-C 初始化器不同,Swift 初始化器不返回 价值。

(这不适用于failable initialisers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多