-1

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;

オプションのバインディングが期待どおりに機能しない理由についての洞察はありますか?

4

1 に答える 1

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

于 2016-10-27T17:45:18.023 に答える