2

Xcode 6.3 パースを使用。フレームワークでエラーが発生していたので、更新された Parse フレームワークをダウンロードすると、動作が開始されました。

さて、この方法logInWithUsernameが何であるかを理解しようとしている新しいことがあります。以前はかなりシンプルでした。コードを書いている間、より多くの null が表示されます。そして、ある時点で、主にポインターへのポインター(つまりNSError)で混乱します。

[PFUser logInWithUsername:(NSString * __nonnull) 
                 password:(NSString * __nonnull) 
                    error:(NSError * __nullable __autoreleasing * __nullable)];

定義にジャンプすると、それはまったく別の話です。構文は次のように明確に見えます。

+ (PF_NULLABLE instancetype)logInWithUsername:(NSString *)username
                                     password:(NSString *)password
                                        error:(NSError **)error;

このフレームワークの構成またはセットアップ側で何か不足していますか?

4

1 に答える 1

3

Objective-C の端からは、これらの nullability アノテーションを完全に無視できます。これらは厳密に Swift とのインターフェースであり、Swift がすべてを暗黙的にアンラップされたオプションとして扱うのではなく、オブジェクトをオプションまたは非オプションとして扱うかどうかを許可します。

Objective-C メソッドを翻訳すると、次のようになります。

[PFUser logInWithUsername:(NSString * __nonnull) 
                 password:(NSString * __nonnull) 
                    error:(NSError * __nullable __autoreleasing * __nullable)];

Swift に相当するものは次のようになります。

PFUser.logIn(username: String, password: String, error: inout NSError?)

その要点は次のとおりです。このメソッドはnilユーザー名またはパスワードの引数を受け入れませんが、オプションのエラー オブジェクトへのオプションの参照を想定しています。

つまり、ポインタがnilであるか、それが指しているものが であるかは問題ではありませんnil(どちらも であることが許可されていますnil)。メソッドはそれを整理します。

メソッドを呼び出してnilエラー パラメータを渡すと、nilポインタが渡されます。初期化されていないNSErrorポインタ ( ) を渡す場合は、オブジェクトへのポインタへNSError *error = nil;の非nilポインタを渡しています。nilNSError

ただし、Objective-C 側からこのライブラリを使用している場合は、これを完全に無視できます。いつもと同じように機能します。これは、コンパイラがパラメーターの null 可能性について厳密である Swift エンドからのみ影響を与えます。

Objective-C の nullability アノテーションの詳細については、この Stack Overflow answer を参照してください

于 2015-05-25T23:48:58.170 に答える