为什么此可选绑定不能按预期工作?

时间:2016-10-27 16:54:50

标签: ios objective-c swift swift3 optional-binding

我正在将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;

有关为什么可选绑定无法正常工作的任何见解?

1 个答案:

答案 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