gpt4 book ai didi

swift - 在 Swift 中覆盖多个重载的 init() 方法

转载 作者:搜寻专家 更新时间:2023-10-31 08:19:14 25 4
gpt4 key购买 nike

我正在尝试使用以下代码在 Swift (Xcode Beta 5) 中创建自定义 NSTextFieldCell 子类:

class CustomHighlightTextFieldCell : NSTextFieldCell {

required init(coder aCoder: NSCoder!) {
super.init(coder: aCoder)
}

init(imageCell anImage: NSImage!) {
super.init(imageCell: anImage)
}

init(textCell aString: String!) {
super.init(textCell: aString)
}
}

但是,我在第 2 和第 3 个 init() 声明中收到编译错误:

/Users/Craig/projects/.../CustomHighlightTextFieldCell:8:40: Invalid redeclaration of 'init(imageCell:)'
/Users/Craig/projects/.../CustomHighlightTextFieldCell.swift:17:5: 'init(imageCell:)' previously declared here

/Users/Craig/projects/.../CustomHighlightTextFieldCell:7:39: Invalid redeclaration of 'init(textCell:)'
/Users/Craig/projects/.../CustomHighlightTextFieldCell.swift:21:5: 'init(textCell:)' previously declared here

虽然这里有一些奇怪的编译器错误(我收到了常见的“SourceKitService 终止,编辑器功能暂时受限。”消息),但我似乎在我的方法覆盖中遗漏了一些东西 - 但我无法分辨什么。

我假设命名参数,或者至少参数 types,将表明这里有三种不同的 init() 方法,但显然我'我缺少拼图的关键部分。

编辑:如果我将 override 添加到第二个和第三个 init() 方法,我会遇到一个单独的问题:

required init(coder aCoder: NSCoder!) {
super.init(coder: aCoder)
}

override init(imageCell anImage: NSImage!) {
super.init(imageCell: anImage)
}

override init(textCell aString: String!) {
super.init(textCell: aString)
}

这个新问题(通过添加两个 override 关键字简单地调用)似乎几乎与原始问题相矛盾。

/Users/Craig/projects/.../CustomHighlightTextFieldCell.swift:17:14: Initializer does not override a designated initializer from its superclass
/Users/Craig/projects/.../CustomHighlightTextFieldCell.swift:21:14: Initializer does not override a designated initializer from its superclass

最佳答案

看起来你的声明(带覆盖)应该就足够了,但是,它们似乎也需要@objc 声明。这有效:

class CustomHighlightTextFieldCell : NSTextFieldCell {

required init(coder aCoder: NSCoder!) {
super.init(coder: aCoder)
}

@objc(initImageCell:)
override init(imageCell anImage: NSImage!) {
super.init(imageCell: anImage)
}

@objc(initTextCell:)
override init(textCell aString: String!) {
super.init(textCell: aString)
}
}

关于swift - 在 Swift 中覆盖多个重载的 init() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255181/

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