尝试从目标C以及swift类创建一个新的swift类对象,其中initializer参数是可选的。
这是我试图初始化的课程,
@objc
public class ClassStatus: NSObject {
public private(set) var prop1: DemoClass?
public private(set) var prop2: DemoClass2?
public override var description: String {
return "\(prop1)"
}
public init(prop: DemoClass?) {
super.init()
self.prop1 = prop
}
public convenience init(propA: DemoClass?, propB: DemoClass2) {
self.init(prop: propA)
self.prop2 = propB
}
}
来自Swift,
let statusObj = ClassStatus(prop: nil)
来自Objective-C
ClassStatus *connState = [[ClassStatus alloc]initWithProp:nil];
为什么在这两种情况下创建的对象都是nil,而不是将预期属性的有效对象返回给nil。
EDIT :: 打印对象会给你零。在这里,我实际上尝试使用该对象,并在对象中查找属性是否为零或有效,基于此我将继续进行。这里的情况是,为什么对象变为nil而不是创建一个属性为nil的有效对象。
编辑2:这不是一个有效的问题,因为nil的结果实际上是因为覆盖了描述方法而发生的。对象创建按原样发生。
答案 0 :(得分:1)
通常,当我们尝试打印Object时,它会默认从description
属性打印对象描述。
实际上你用NSObject
覆盖超类(description
)属性prop1
,所以每当你试图在console或print语句中打印statusObj时,它返回nil,这是来自最重要的财产description
。
因此,如果从description
类中删除ClassStatus
变量,则可以在print
或console
语句中查看实际变量。否则,您必须使用prop1
初始化以获取无nil
说明。
答案 1 :(得分:1)
正如Martin R所说,它只是打印出来的描述.ClassStatus已启动,它不是零。我知道这不是一个解决方案,但我没有足够的声誉发表评论.. !! :-)
答案 2 :(得分:0)
一些事情:
由于您是NSObject的子类,因此不需要@objc。 此外,只做'私人(设定)',而不是'公私(设))。最后也是更重要的是,您的init方法必须更改为:
public init(prop: DemoClass?) {
self.prop1 = prop
super.init()
}
您必须在调用super.init()
之前初始化您的成员答案 3 :(得分:0)
您overriding
的默认功能NSObject
正在打印nil
description
是一个打印和对象足迹的函数。
您可以查看此链接,了解如何override description
并充分利用它
http://iosdevelopertips.com/cocoa/overriding-nsobject-description-method.html