非常に新しいので、ここでは非常に単純な問題ですが、UserDefaults
からオプションのラップを解除するのに苦労しています。 UIDの値は "dan"です。ここでは、コードがあります:スウィフト - オブジェクトが存在するかどうかを確認した後でも「オプション」を表示します。
override func viewDidLoad() {
super.viewDidLoad()
let uidObject1 = UserDefaults.standard.object(forKey: "UID")
if let uid = uidObject1 {
updateUsername.setTitle("\(uid)", for: UIControlState.normal)
print("on load \(uid)")
}
}
これは、ボタンupdateUsernameラベルを変更しても、次のコンソールに出力します...オプションの負荷(「ダン」)に
私はできませんOptional()を取り除く。私はuidをアンラップしようとしました。
プリント( "ロード上(UID!)")
Xcodeのは、私は非オプション型 'どれ' がアンラップ値を強制することはできませんと言われますよう。
周囲を検索すると、if let uid = uidObject1
のチェックで、uidObject1
が存在する場合にのみ実行されるOptional()が削除されていることが分かりました。誰かが私を正しい方向に向けることができますか?
編集: ここは私のコードです。
@IBAction func updateUsername(_ sender: AnyObject) {
if let uid = userName.text {
UserDefaults.standard.set("\(userName.text)", forKey: "UID")
updateUsername.setTitle("\(uid)", for: UIControlState.normal)
}
}
ANSWER - そのようにセット(userName.text)をアンラップするために必要な>(userName.text!)解決しました。 Oliverに感謝します。
よう
string(forKey:)
方法を使用して:UIDを割り当てる場合、あなたはこのようにしたいタイプにキャストする必要がありますstring 'オプション(" dan ")'。 –