2016-11-18 3 views
1

nilを探している[String: Any]の辞書を繰り返しているので、JSONの書き込みの場合はNSNullと置き換えることができます。私のプリコンパイラの警告では、Anynilを比較すると常にfalseになりますが、見つからない少なくとも2つのnilsが含まれていることがわかります。チェックする方法はありますか?Anyはゼロですか?オプションでないAnyをnilと比較すると、常にfalseになりますか?

+1

スウィフト3.0.1(Xcodeの8.1)のよう、渡されたときに 'nil'がNSNull''に自動的に架設されていますObjective-C API(** JSONでは** null **になります)については、https://github.com/apple/swift-evolution/blob/master/proposals/0140-bridge-optional-to-nsnullを参照してください。 md。それはあなたのチェックを冗長にするかもしれません。例についてはhttp://stackoverflow.com/a/39976821/1187415を参照してください。 –

+0

私はこれを解決すると思います - 今は8.0です。JSONに何も書き込まないときは、無効な型SwiftValueのエラーを返します。 – mcornell

答えて

6

任意はnilです。それ以外は決してnilになることはできません。 Anyはオプションではありません。したがって、Anynilを比較する点はありません。テストは決して成功しません。

これらが選択肢であることが分かっている場合は、Any?と入力してください。これはオプションで、nilと比較することができます。ここに簡単な例があります:

let s : String? = nil 
    let any : Any? = s 
    if any == nil { 
     print("nil") // nil 
    } 

ご覧のとおり、テストは成功します。

(すべての可能であればそれでも、より正確なものを入力してさらに良いでしょう。)

+0

おそらく私のアンラップはオフですが、 mirror.children.enumerated()内の(_、attr)の の場合{ let propName = attr.labelの場合、jsonKey = keys [propName] { の場合、nilable = attr.valueをAnyとしますか? { 場合nilable == nilを{ 印刷 } ( "と呼ばれることはありません")}}} を '' ' – mcornell

+0

さて、あなたは別の質問をする必要があると思いますあなたのコードの詳細に取得したい場合は、そのコードと、それを理解するために必要なすべて(つまり、すべての宣言された型)を表示します。あなたが本当に尋ねた疑問、つまりなぜこの警告と実行時の結果が得られたのか、そして 'nil'との比較を成功させるためには何が必要なのか、と私は答えました。 – matt

関連する問題