2017-01-06 12 views
-1

URLでデータを送信しようとしていますが、ユーザーがそれを変更しないため空の文字列を与えるため、スウィフトのオプション値をアンラッピングしている間に予期せずnilが見つかりました3

ユーザーがそれを変更していないが、私はコードを実行していたとき、私はこのように、このラインでは、各重要なラインとエラーで

let postData:NSData = post.data(using: String.Encoding.ascii.rawValue)! as NSData 

ポストを"unexpectedly found nil while unwrapping an Optional value"表示され、ブレークポイントを置く場合:

username=myusername&password=&tel=&email=myemail&address=&DOB=choose&cinsiyet=2&changedPass=false 

電話番号、パスワード、住所には値がありません(または空の文字列です)。ユーザーが変更しないためです。

文字列のエンコーディングは、この場合、または変更されていないすべてのテキストフィールドに ""(空文字列)が含まれているため影響を受ける可能性があります。

+0

null以外の値がある必要がある場合は、その値を見つけます。 – AMAN77

答えて

3

post.data(using:)の結果を強制的にアンラッピングしています。 Dataへの変換が失敗した場合(たとえば、投稿に使用している以外のエンコードがある場合)、nilを返し、コードがクラッシュします。

一般的には、成功することが1000%保証されていない場合は、強制的アンラッピング(!)または強制的なキャストas!を使用しないことをお勧めします。

guard let postData = post.data(using: String.Encoding.ascii) else { 
    //an error occurred 
    return 
} 

また、スウィフト3に、我々はNSDataを使用しないでください。その代わり、あなたはguard letステートメントを使用する必要があります。代わりにDataを使用してください。

0

私は3つの値を取るかもしれない1つのテキストフィールドのif文を入れて解決しました。

関連する問題