gpt4 book ai didi

ios - Xcode 6.1 中的失败初始值设定项

转载 作者:IT王子 更新时间:2023-10-29 05:14:21 25 4
gpt4 key购买 nike

我有一个在 Xcode 6.0 上完美运行的自定义 UITableViewCel(没什么特别的)。当我尝试使用 Xcode 6.1 编译它时,编译器显示以下错误:

不可失败的初始化器不能链接到用“init?”编写的可失败的初始化器“init(style:reuseIdentifier:)”

这是单元格的代码:

class MainTableViewCell: UITableViewCell {

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setup()
}

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
}

func setup() {<...>}
}

作为解决方案,编译器建议使用“init?”传播故障:

override init?(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setup()
}

我有点困惑。是否可以详细说明什么是(non)failable initialiser 以及应该如何使用和覆盖它?

最佳答案

在 Swift 1.1 中(在 Xcode 6.1 中)Apple 引入了可失败初始化器——即可以返回 nil 而不是实例的初始化器。您可以通过在 init 之后放置 ? 来定义可失败初始化程序。您尝试覆盖的初始化程序在 Xcode 6.0 和 6.1 之间更改了其签名:

// Xcode 6.0
init(style: UITableViewCellStyle, reuseIdentifier: String?)

// Xcode 6.1
init?(style: UITableViewCellStyle, reuseIdentifier: String?)

因此,要覆盖您需要对初始化程序进行相同的更改,并确保在以这种方式创建单元格时处理 nil 情况(通过分配给可选)。

您可以阅读更多关于 failable initializers in Apple's documentation 的信息.

关于ios - Xcode 6.1 中的失败初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26427007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com