2016-08-28 11 views
-1

xcode 7の中で非常に単純なログイン確認アプリを構築しています。Swiftを使用しています。私は非常に新しいSwiftと一般的なアプリケーションを構築するので、私は自分のコードの一部でいくつかの問題を抱えています。オプションの値 'string?'の値値が空であるかどうかを確認するときにアンラップしない

ユーザーがフィールドを空にしているかどうかを確認している場合は、エラーアラートメッセージが表示されます。私は私のプロジェクトをビルドするために行くとき

はしかし、私はエラーを取得する:

Value of optional type 'String?' not unwrapped;

これは私のコードです:

let userEmail = userEmailTextField.text 
let userPassword = userPasswordTextField.text 
let userRepeatPassword = repeatPasswordTextField.text 

if(userEmail.isEmpty || userPassword.isEmpty || userRepeatPassword.isEmpty){ 
    displayAlertMessage("All fields are required.") // custom made function 
    return; 
} 

すべてのヘルプは高く評価されます。

また、誰かが私のコードが正しく機能していない理由を説明できれば、それはすばらしいことになります!なぜなら、私は他のフォーラムの説明や修正を理解できないようです。

let userEmail = userEmailTextField.text! 
let userPassword = userPasswordTextField.text! 
let userRepeatPassword = repeatPasswordTextField.text! 

か、すでに述べたように、この

guard let userEmail = userEmail, let userPassword = userPassword, let userRepeatPassword = userRepeatPassword where !userEmail.isEmpty && !userPassword.isEmpty && !userRepeatPassword.isEmpty else { 
    displayAlertMessage("All fields are required.") // custom made function 
    return; 
} 
+0

'userEmail'、' userPassword'、 'userRepeatPassword'という3つの変数はあなたの投稿には記述されていません。私はいくつかの推測をすることができますが、それらについていくつかの説明を追加する方が良いです。 – OOPer

+0

@OOPer申し訳ありません、今すぐ追加します –

+0

たくさんのオプションがあります:[テキストフィールドが空であるかどうかを確認する方法](http://stackoverflow.com/questions/24102641/how-to-check -if-a-text-field-is-empty-or-not-swift)のいずれかを使用します。 –

答えて

2

問題ここでは、あなたがこのように変更する必要がありますのでUITextFieldのプロパティtextがoptionl文字列であるということですプロパティtextはタイプString?(別名Optional<String>)なので、メソッドを直接適用したり、プロパティを取得することはできませんString

強制アンラッピング(!)は、実際にはnilである可能性があるため、非常に危険です。その代表はif letですが、guard letまたは時々while letが有用である可能性がある、

  • 使用オプションのバインディング:このような場合には

    、あなたは任意の値を治療するために、いくつかのオプションがあります。

  • ?.で表されるオプションの連鎖を使用します。たぶんあなたはこれをどこか別の場所で使っています。
  • nil-coalescing演算子??を使用してデフォルト値を与えます。後者の二つで

、私はこの行を取得する:あなたが見たよう

if((userEmail?.isEmpty ?? true) || (userPassword?.isEmpty ?? true) || (userRepeatPassword?.isEmpty ?? true)) { 

を、userEmailの型はString?あるので、私は、オプションのチェーンを選択している:

userEmail?.isEmpty 

これは3種類の値を返す可能性があります:

  • Optional.Some(true)
  • Optional.Some(false)
  • Optional.None(これはnilと呼ばれている)

それはまだオプションです


(私は。読みやすくするため、<Bool>を指定する省略)ので、私はに?? trueを追加しましたnilの場合はデフォルト値を指定してください。

userEmail?.isEmpty ?? true 
  • LHS:Optional.Some(true) - >true??の左手側はnilない、開封されたLHS値を使用)
  • LHS:Optional.Some(false)から??の>false(左側がnilないが、使用LHS値アンラップ)
  • LHS:Optional.None - >true(左側??のはnilので、リグでありますテキストがnilとき右辺値が使用されているHT)

あなたが知っている、あなたはとてもnil場合のデフォルト値trueを供給することは適切であり、としてそれを考える必要があります。

3つの変数すべてに同様のコードを書く必要があります。上の行が表示されます。

+0

その意味を説明してもらえますか? '! 'マークは何をしますか? :)ありがとうbtw、これは本当にそれを修正しました! –

+0

@CaelanGrgurovicこの素早いガイドをチェックしてください:https://developer.apple.com/library/ios/documentation/Swift/Procepting/Conceptual/Swift_Programming_Language/OptionalChaining.html –

+0

@CaelanGrgurovic私の回答があなたの問題を解決したら、私はそれを正しいものとしてマークしてください。ありがとうと思います、ありがとうございます。 –

1

のようにそれを使用し、UITextField

関連する問題