2017-09-19 11 views
2

てみてください。しかし、コードはアプリケーションをクラッシュさせます。スウィフトは、私は私が維持されるコードに次のように表示さ疑問符

私はtry?(疑問符を付けて試してください)ということを理解しようとしています。

グーグルやStackOverflowingは有用な情報を返しませんでした。

したがって、try?はSwiftで何を意味しますか?

+2

ルック:値はゼロですか?そのような場合、私はエラーがこのように捕まえることはできないと思うので、 "試してください"それについて何もしません。 – Larme

+0

ありがとうございます。私はドキュメンテーションのその部分を見逃していました。 – UrK

+2

iBooksの「The Swift Programming Language」を開くには、「Find」と「try?」のコマンド-Fを入力します。検索フィールドに入力します。それからすぐに答えを見つけるでしょう。 –

答えて

7

tryに疑問符(try?)を付けると、throwable関数の戻り値はオプションになります。関数がエラーをスローした場合はnilになります(スウィフトはエラーをスローする代わりにnilを返すので、do-catchブロックは不要です)、エラーがスローされなかった場合の関数のラップされた戻り値になります。

これは、あなたがあなた自身の関数内での行動を模倣することができる方法です。

func parse(values: NSMutableDicationary)->Data?{ 
    do { 
     return try JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions()) 
    } catch { 
     return nil 
    } 
} 

これは本質的に同じである:アップルのドキュメントから

func parse(values: NSMutableDicationary)->Data?{ 
    return try? JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions()) 
} 
+0

間違いなく意味があります。迅速な答えをありがとう、私はそれについてアップルのドキュメントを見逃してどのような考えがありません。 – UrK

2

、してみてください?それをオプションの値に変換してエラーを処理します。 tryを評価しているときにエラーがスローされたら?式の値はnilです。

だから、結果は、二つのうちの一つである:エラースローとdataがある

A.は皆無であり、データの変数を使用しようとすると、クラッシュ

B.スローされ、エラーがないの原因となるものですtry?によってキャッチされ、何らかの理由で非同期で実行される関数で多く発生する

2

try?

正常終了した値をアンラップし、nilを返してエラーをキャッチするオプションを返します。あなたが(理由)このつもりが失敗した理由を、あなた以外はできませんtry?を使用truefalse

でのみ発見しようとしているときtry?を使用してください。 `「コードはしかし、アプリケーションをクラッシュさん」https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.htmlにオプションValues`にエラーを変換するための

func parse(values: NSMutableDicationary) { 

    //It return only exacat value Data or nil. 
    if let data = try? JSONSerialization.data(withJSONObject: values, options: JSONSerialization.WritingOptions()) { 
     //Perform operation with data 
    } 
} 
関連する問題