Objective-C アプリに Swift を導入しようとしています。
特定のプロパティが nil の場合にボタンを非表示にする UIViewController サブクラスがあります。オプションのバインディングを使用すると、私の Swift コードは次のようになります。
if let optionalVar = modelObject.propertyThatCouldBeNil {
button.setTitle(...)
} else {
button.hidden = true
}
私の希望は、propertyThatCouldBeNil が nil の場合、if が満たされず、制御が else に続くことでした。しかし、それは起こっていることではありません。実際、ブレークポイントを設定すると、次のように表示されます...
(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;
オプションのバインディングが期待どおりに機能しない理由についての洞察はありますか?