Swift 1.2 为什么我不能继承任何NSCell 的子类?
Swift 1.2 Why cannot I subclass any NSCell's subclass?
为什么我不能继承 NSCell 的任何子类?
我想继承 MyButtonCell
,即 CustomButtonCell: NSButtonCell
。含义
class MyCustomButtonCell: MyButtonCell { }
总是给我以下错误:
<unknown>:0: error: declaration has a different @objc name from the declaration it overrides ('initTextCell:' vs. 'initWithTextCell:')
Custom_Controls.MyButtonCell:9:24: note: overridden declaration is here
@objc @objc override init(textCell aString: String)
^
<unknown>:0: error: declaration has a different @objc name from the declaration it overrides ('initImageCell:' vs. 'initWithImageCell:')
Custom_Controls.MyButtonCell:10:24: note: overridden declaration is here
@objc @objc override init(imageCell image: NSImage?)
^
重现我的问题的简单步骤:
打开终端
类型:swift
(如果你有最新的Xcode 6.3.1)
当你得到时,
Welcome to Swift version 1.2. Type :help for assistance.
键入以下内容:
1> import AppKit
2> class Foo : NSCell {}
3> class Bar : Foo {}
- 你会得到这些错误:
declaration has a different @objc name from the declaration it overrides ('initTextCell:' vs. 'initWithTextCell:')__lldb_expr_9.Foo:3:24: note: overridden declaration is here
@objc @objc override init(textCell aString: String)
^
declaration has a different @objc name from the declaration it overrides ('initImageCell:' vs. 'initWithImageCell:')__lldb_expr_9.Foo:4:24: note: overridden declaration is here
@objc @objc override init(imageCell image: NSImage?)
^
为什么?有办法解决这个问题吗?
仅供参考:Swift 1.1 没有这个问题!
貌似加入一个符合NSCoding
的init方法就去掉了错误:
import AppKit
class Foo : NSCell {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
class Bar : Foo {}
为什么我不能继承 NSCell 的任何子类?
我想继承 MyButtonCell
,即 CustomButtonCell: NSButtonCell
。含义
class MyCustomButtonCell: MyButtonCell { }
总是给我以下错误:
<unknown>:0: error: declaration has a different @objc name from the declaration it overrides ('initTextCell:' vs. 'initWithTextCell:')
Custom_Controls.MyButtonCell:9:24: note: overridden declaration is here
@objc @objc override init(textCell aString: String)
^
<unknown>:0: error: declaration has a different @objc name from the declaration it overrides ('initImageCell:' vs. 'initWithImageCell:')
Custom_Controls.MyButtonCell:10:24: note: overridden declaration is here
@objc @objc override init(imageCell image: NSImage?)
^
重现我的问题的简单步骤:
打开终端
类型:
swift
(如果你有最新的Xcode 6.3.1)当你得到时,
Welcome to Swift version 1.2. Type :help for assistance.
键入以下内容:
1> import AppKit
2> class Foo : NSCell {}
3> class Bar : Foo {}
- 你会得到这些错误:
declaration has a different @objc name from the declaration it overrides ('initTextCell:' vs. 'initWithTextCell:')__lldb_expr_9.Foo:3:24: note: overridden declaration is here @objc @objc override init(textCell aString: String) ^ declaration has a different @objc name from the declaration it overrides ('initImageCell:' vs. 'initWithImageCell:')__lldb_expr_9.Foo:4:24: note: overridden declaration is here @objc @objc override init(imageCell image: NSImage?) ^
为什么?有办法解决这个问题吗?
仅供参考:Swift 1.1 没有这个问题!
貌似加入一个符合NSCoding
的init方法就去掉了错误:
import AppKit
class Foo : NSCell {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
class Bar : Foo {}