我正在将Swift引入Objective-C应用程序。
我有一个UIViewController子类,如果某个属性为nil,我想隐藏一个按钮。我的Swift代码看起来像这样,使用可选的绑定:
if let optionalVar = modelObject.propertyThatCouldBeNil {
button.setTitle(...)
} else {
button.hidden = true
}
我希望当propertyThatCouldBeNil为零时,if不满意并且控制将继续到其他地方。但那不是正在发生的事情。事实上,如果我设置断点,我看到的是......
(lldb) po optionalVar
nil
(lldb) po modelObject.propertyThatCouldBeNil
▿ Optional<Optional<String>>
- some : nil
后一个是绊倒我的东西。我认为它应该是可选的,而不是嵌套的,对吗?
更多信息......
因为我在这个类中使用了modelObject,为方便起见,它被定义为一个隐式解包的可选...
var modelObject : ModelObjectClass!
ModelObjectClass实际上是一个Objective-C类,该属性是只读的并声明为...
@property (readonly, nullable) NSString *propertyThatCouldBeNil;
在它的实现中,它实际上充当了另一个就绪属性的代理......
- (NSString*) propertyThatCouldBeNil {
return self.someOtherProperty;
}
someOtherProperty也可以为空......
@property (nullable, nonatomic, retain) NSString *someOtherProperty;
有关为什么可选绑定无法正常工作的任何见解?
答案 0 :(得分:1)
好像和我一起工作
@interface ModelObjectClass : NSObject
@property (readonly, nullable) NSString *propertyThatCouldBeNil;
@property (nullable, nonatomic, retain) NSString *someOtherProperty;
- (nullable NSString*) propertyThatCouldBeNil;
@end
@implementation ModelObjectClass
- (nullable NSString*) propertyThatCouldBeNil {
return self.someOtherProperty;
}
@end