質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

4回答

2054閲覧

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

Eijirou

総合スコア6

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/04/13 14:24

編集2020/04/13 14:47

import

1 2class SettingsViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate { 3 4 5 @IBOutlet weak var usericonView: UIImageView! 6 7 @IBOutlet weak var nickNameTextField: UITextField! 8 9 @IBOutlet weak var userNameTextField: UITextField! 10 11 @IBOutlet weak var sendEmailTextField: UITextField! 12 13 @IBOutlet weak var sendPhoneNumber: UITextField! 14 15 @IBOutlet weak var nextSendEmailTextField: UITextField! 16 17 @IBOutlet weak var nextSendPhoneNumber: UITextField! 18 19 20 21 @IBOutlet weak var nickNameLabel: UILabel! 22 23 @IBOutlet weak var userNameLabel: UILabel! 24 25 @IBOutlet weak var sendEmailLabel: UILabel! 26 27 @IBOutlet weak var sendPhoneLabel: UILabel! 28 29 @IBOutlet weak var nextSendEmailLabel: UILabel! 30 31 @IBOutlet weak var nextSendPhoneLabel: UILabel! 32 33 34 var nickNameText:String = "ニックネームを入力" 35 var userNameText:String = "名前を入力" 36 var sendEmailText:String = "送り先Emailを入力" 37 var sendPhone:String = "電話番号を入力" 38 var nextSendEmailText:String = "送り先Email-2を入力" 39 var nextSendPhone:String = "電話番号-2を入力" 40 41 42 let userDefaults = UserDefaults.standard 43 44 45 46 override func viewDidLoad() { 47 super.viewDidLoad() 48 49 50 nickNameTextField.delegate = self 51 userNameTextField.delegate = self 52 sendEmailTextField.delegate = self 53 sendPhoneNumber.delegate = self 54 nextSendEmailTextField.delegate = self 55 nextSendPhoneNumber.delegate = self 56 57 userDefaults.register(defaults: ["NickName": "ニックネームを入力"]) 58 nickNameLabel.text = readData() 59 60 userDefaults.register(defaults: ["UserName": "名前を入力"]) 61 userNameLabel.text = readData() 62 63 userDefaults.register(defaults: ["SendEmail": "Emailを入力"]) 64 sendEmailLabel.text = readData() 65 66 userDefaults.register(defaults: ["SendPhone": "電話番号を入力"]) 67 sendPhoneLabel.text = readData() 68 69 userDefaults.register(defaults: ["NextSendEmail": "Emailを入力"]) 70 nextSendEmailLabel.text = readData() 71 72 userDefaults.register(defaults: ["NextSendPhone": "電話番号を入力"]) 73 nextSendPhoneLabel.text = readData() 74 75 } 76 77 //アルバムの写真を選択してアイコンとして表示する。 78 @IBAction func toAlbumButton(_ sender: Any) { 79 80 let picker = UIImagePickerController() 81 picker.sourceType = .photoLibrary 82 picker.delegate = self 83 present(picker, animated: true) 84 self.present(picker, animated: true, completion: nil) 85 86 } 87 88 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 89 if let selectedImage = info[.originalImage] as? UIImage{ 90 usericonView.image = selectedImage 91 } 92 self.dismiss(animated: true) 93 } 94 95 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 96 self.dismiss(animated: true, completion: nil) 97 } 98 99 //テキスト入力設定 100 101 func textFieldShouldReturn(_ textField: UITextField) -> Bool{ 102 nickNameText = textField.text! 103 nickNameLabel.text = nickNameText 104 105 userNameText = textField.text! 106 userNameLabel.text = userNameText 107 108 sendEmailText = textField.text! 109 sendEmailLabel.text = sendEmailText 110 111 sendPhone = textField.text! 112 sendPhoneLabel.text = sendPhone 113 114 nextSendEmailText = textField.text! 115 nextSendEmailLabel.text = nextSendEmailText 116 117 nextSendPhone = textField.text! 118 nextSendPhoneLabel.text = nextSendPhone 119 120 121 textField.resignFirstResponder() 122 123 saveData(str: nickNameText) 124 saveData(str: userNameText) 125 saveData(str: sendEmailText) 126 saveData(str: sendPhone) 127 saveData(str: nextSendEmailText) 128 saveData(str: nextSendPhone) 129 130 return true 131 132 } 133 134 func saveData(str: String){ 135 userDefaults.set(str, forKey: "NickName") 136 userDefaults.set(str, forKey: "UserName") 137 userDefaults.set(str, forKey: "SendEmail") 138 userDefaults.set(str, forKey: "SendPhone") 139 userDefaults.set(str, forKey: "NextSendEmail") 140 userDefaults.set(str, forKey: "NextSendPhone") 141 } 142 143 func readData() -> String { 144 let str: String = userDefaults.object(forKey: "NickName") as! String 145 146 let _: String = userDefaults.object(forKey: "UserName") as! String 147 148 let _: String = userDefaults.object(forKey: "SendEmail") as! String 149 150 let _: String = userDefaults.object(forKey: "SendPhone") as! String 151 152 let _: String = userDefaults.object(forKey: "NextSendEmail") as! String 153 154 let _: String = userDefaults.object(forKey: "NextSendPhone") as! String 155 156 return str 157 158 } 159 160 161 @IBAction func hozonButtton(_ sender : AnyObject) { 162 163 // Key の値を削除 164 userDefaults.removeObject(forKey: "NickName") 165 userDefaults.removeObject(forKey: "UserName") 166 userDefaults.removeObject(forKey: "SendEmail") 167 userDefaults.removeObject(forKey: "SendPhone") 168 userDefaults.removeObject(forKey: "NextsendEmail") 169 userDefaults.removeObject(forKey: "NextSendPhone") 170 171 172 173 userDefaults.set(true, forKey: "NickName") 174 let str: String = userDefaults.object(forKey: "NickName") as! String 175 nickNameLabel.text = str 176 177 userDefaults.set(true, forKey: "UserName") 178 let _: String = userDefaults.object(forKey: "UserName") as! String 179 nickNameLabel.text = str 180 181 userDefaults.set(true, forKey: "SendEmail") 182 let _: String = userDefaults.object(forKey: "SendEmail") as! String 183 nickNameLabel.text = str 184 185 userDefaults.set(true, forKey: "SendPhone") 186 let _: String = userDefaults.object(forKey: "SendPhone") as! String 187 nickNameLabel.text = str 188 189 userDefaults.set(true, forKey: "NextSendemail") 190 let _: String = userDefaults.object(forKey: "NextSendEmail") as! String 191 nickNameLabel.text = str 192 193 userDefaults.set(true, forKey: "NextSendPhone") 194 let _: String = userDefaults.object(forKey: "NextSendPhone") as! String 195 nickNameLabel.text = str 196 197 nickNameLabel.text = str 198 userNameLabel.text = str 199 sendEmailLabel.text = str 200 sendPhoneLabel.text = str 201 nextSendEmailLabel.text = str 202 nextSendPhoneLabel.text = str 203 204 205 print() 206 207 } 208 209 210} 211 212コード
全くの初心者でこのエラーがどこから来てるのか分かりません。 ご指導いただければ存じます。 一通りコードを書いてビルドして動作を確認してましたが、155行目で 表題のエラーメッセージが発生しました。 ### Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

該当コードは let _: String = userDefaults.object(forKey: "UserName") as! String です。
どこにnilになるのか分かりません。

### 該当のソースコード ### 試したこと いくつかの関数を見直しました。 ### 補足情報(FW/ツールのバージョンなど) Xcodwは最新です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/04/13 14:27

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
Eijirou

2020/04/13 14:31

承知しました。
Eijirou

2020/04/13 14:48

大丈夫でしょうか??
guest

回答4

0

readData()メソッドで最初のstrしか使用していないのであれば、以下のように変更してしまえばいいのではないでしょうか?

Swift:変更前

1 2func readData() -> String { 3 let str: String = userDefaults.object(forKey: "NickName") as! String 4 5 let _: String = userDefaults.object(forKey: "UserName") as! String 6 7 let _: String = userDefaults.object(forKey: "SendEmail") as! String 8 9 let _: String = userDefaults.object(forKey: "SendPhone") as! String 10 11 let _: String = userDefaults.object(forKey: "NextSendEmail") as! String 12 13 let _: String = userDefaults.object(forKey: "NextSendPhone") as! String 14 15 return str 16 17 } 18

↓↓↓↓

Swift:

1func readData() -> String { 2 let str: String = userDefaults.object(forKey: "NickName") as! String 3 4 return str 5 6 } 7

投稿2020/04/13 15:18

Tetsukick

総合スコア297

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/13 15:24

いや viewDidLoad()内で、 nickNameLabel.textt = userDefaults.object(forKey: "NickName") as! String sendEmailLabel.text = userDefaults.object(forKey: "SendEmail") as! String 延々と処理… でないと質問者さんは現段階では書けないと思う。 readData()は他で使わなそうだし。
Tetsukick

2020/04/13 15:36 編集

これ、 ```Swift nickNameLabel.text = readData() ``` するときに、まだ他のUserDefaultsに登録してないだけですね。。 以下に変更して、ViewDidRoad内のreadData()を呼ぶ際に適切なKeyを渡して上げてください。 ```Swift func readData(key: String) -> String { let str: String = userDefaults.object(forKey: key) as! String return str } ```
Eijirou

2020/04/13 15:41

すみません、ちょっと分からないです。。。
退会済みユーザー

退会済みユーザー

2020/04/13 15:47 編集

ほにゃらら = readData()の前で、レジスタをまとめて一気に処理すればエラーは消えるよ って回答に追記したんだけど、わからないんだと思うので、Tetsukickさんフォローお願いします。
Eijirou

2020/04/13 15:53

let str: String = userDefaults.object(forKey: "NickName") as! Stringを func readData(key: nickName) -> String{ let str: String = userdefault.object(forKey: NickName) as! String return str } でしょうか?
Eijirou

2020/04/14 13:56

ありがとうございました!! まだまだ理解力がなくみなさんの回答スピードに驚きました(汗 今後もよろしくお願いします♪
guest

0

エラーの出る行の上で、

swift

1print(userDefaults.object(forKey: "UserName")) 2```ってしてみたら`nil`って表示されない? 3 4--- 5viewDidLoad()の中で、初期値を設定する前に値を読み込んでいます。 6初期値を全て登録してから、値を読み込むようにコードの順番を変更してください。 7 8readData()はいつも"NickName"をキーとして保存してる文字列を返すようになっています。各々のラベルに表示する文字列を返す用に変更してください。 9 10userDefaultは保存処理をすると値が上書きされるので、func hozonButton()内部の`Key の値を削除`部分は不要です。 11 12とりあえず直してみてください。

投稿2020/04/13 14:31

編集2020/04/13 15:19
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eijirou

2020/04/13 14:54

let _: Stringの _: 事でしょうか? xcode側でこう書けって書き換えられました。(汗
退会済みユーザー

退会済みユーザー

2020/04/13 14:57

全てのラベルに"NickName"をキーとして保存してる文字列を表示したいの?
Eijirou

2020/04/13 15:00

いえ、ラベルに順番に表示させたいんですが、どうもprint()すると”ニックネームを記入”って なります。
退会済みユーザー

退会済みユーザー

2020/04/13 15:09 編集

普通、print()したらなにも表示されないのですが。 エラーの出る行の上で、print(userDefaults.object(forKey: "UserName"))すると、”ニックネームを記入”を記入と表示されますか?
Eijirou

2020/04/13 15:08

print(userDefaults.object(forKey: "UserName"))を行の上に入れてみました。 そしたら↓ Expression implicitly coerced from 'Any?' to 'Any'と表示されました。 問題のコードの部分ではやはりnilと出ます。
退会済みユーザー

退会済みユーザー

2020/04/13 15:11 編集

コンソールになんと表示されますか? 1.”ニックネームを記入”ってなります。 2. Expression implicitly coerced from 'Any?' to 'Any'と表示されました。 3.問題のコードの部分ではやはりnilと出ます。 コンソール部分に表示されているのは、1.2.3どれが本当ですか?
Eijirou

2020/04/13 15:17

1:”ニックネームを記入”となります。
退会済みユーザー

退会済みユーザー

2020/04/13 15:29

nilじゃないんか〜い。
退会済みユーザー

退会済みユーザー

2020/04/13 15:32

エラーの出ている行の上に↓これ貼り付けると、コンソールになんて表示されるの? print(type(of: userDefaults.object(forKey: "UserName")))
guest

0

ベストアンサー

書き直しました。これしてみてください。

Swift:

1class SettingsViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate { 2 3 4 @IBOutlet weak var usericonView: UIImageView! 5 6 @IBOutlet weak var nickNameTextField: UITextField! 7 8 @IBOutlet weak var userNameTextField: UITextField! 9 10 @IBOutlet weak var sendEmailTextField: UITextField! 11 12 @IBOutlet weak var sendPhoneNumber: UITextField! 13 14 @IBOutlet weak var nextSendEmailTextField: UITextField! 15 16 @IBOutlet weak var nextSendPhoneNumber: UITextField! 17 18 19 20 @IBOutlet weak var nickNameLabel: UILabel! 21 22 @IBOutlet weak var userNameLabel: UILabel! 23 24 @IBOutlet weak var sendEmailLabel: UILabel! 25 26 @IBOutlet weak var sendPhoneLabel: UILabel! 27 28 @IBOutlet weak var nextSendEmailLabel: UILabel! 29 30 @IBOutlet weak var nextSendPhoneLabel: UILabel! 31 32 33 var nickNameText:String = "ニックネームを入力" 34 var userNameText:String = "名前を入力" 35 var sendEmailText:String = "送り先Emailを入力" 36 var sendPhone:String = "電話番号を入力" 37 var nextSendEmailText:String = "送り先Email-2を入力" 38 var nextSendPhone:String = "電話番号-2を入力" 39 40 41 let userDefaults = UserDefaults.standard 42 43 44 45 override func viewDidLoad() { 46 super.viewDidLoad() 47 48 49 nickNameTextField.delegate = self 50 userNameTextField.delegate = self 51 sendEmailTextField.delegate = self 52 sendPhoneNumber.delegate = self 53 nextSendEmailTextField.delegate = self 54 nextSendPhoneNumber.delegate = self 55 56 userDefaults.register(defaults: ["NickName": "ニックネームを入力"]) 57 nickNameLabel.text = readData("NickName") 58 59 userDefaults.register(defaults: ["UserName": "名前を入力"]) 60 userNameLabel.text = readData("UserName") 61 62 userDefaults.register(defaults: ["SendEmail": "Emailを入力"]) 63 sendEmailLabel.text = readData("SendEmail") 64 65 userDefaults.register(defaults: ["SendPhone": "電話番号を入力"]) 66 sendPhoneLabel.text = readData("SendPhone") 67 68 userDefaults.register(defaults: ["NextSendEmail": "Emailを入力"]) 69 nextSendEmailLabel.text = readData("NextSendEmail") 70 71 userDefaults.register(defaults: ["NextSendPhone": "電話番号を入力"]) 72 nextSendPhoneLabel.text = readData("NextSendPhone") 73 74 } 75 76 //アルバムの写真を選択してアイコンとして表示する。 77 @IBAction func toAlbumButton(_ sender: Any) { 78 79 let picker = UIImagePickerController() 80 picker.sourceType = .photoLibrary 81 picker.delegate = self 82 present(picker, animated: true) 83 self.present(picker, animated: true, completion: nil) 84 85 } 86 87 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 88 if let selectedImage = info[.originalImage] as? UIImage{ 89 usericonView.image = selectedImage 90 } 91 self.dismiss(animated: true) 92 } 93 94 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 95 self.dismiss(animated: true, completion: nil) 96 } 97 98 //テキスト入力設定 99 100 func textFieldShouldReturn(_ textField: UITextField) -> Bool{ 101 nickNameText = textField.text! 102 nickNameLabel.text = nickNameText 103 104 userNameText = textField.text! 105 userNameLabel.text = userNameText 106 107 sendEmailText = textField.text! 108 sendEmailLabel.text = sendEmailText 109 110 sendPhone = textField.text! 111 sendPhoneLabel.text = sendPhone 112 113 nextSendEmailText = textField.text! 114 nextSendEmailLabel.text = nextSendEmailText 115 116 nextSendPhone = textField.text! 117 nextSendPhoneLabel.text = nextSendPhone 118 119 120 textField.resignFirstResponder() 121 122 saveData(str: nickNameText) 123 saveData(str: userNameText) 124 saveData(str: sendEmailText) 125 saveData(str: sendPhone) 126 saveData(str: nextSendEmailText) 127 saveData(str: nextSendPhone) 128 129 return true 130 131 } 132 133 func saveData(str: String){ 134 userDefaults.set(str, forKey: "NickName") 135 userDefaults.set(str, forKey: "UserName") 136 userDefaults.set(str, forKey: "SendEmail") 137 userDefaults.set(str, forKey: "SendPhone") 138 userDefaults.set(str, forKey: "NextSendEmail") 139 userDefaults.set(str, forKey: "NextSendPhone") 140 } 141 142 func readData(key: String) -> String { 143 let str: String = userDefaults.object(forKey: key) as! String 144 return str 145 } 146 147 148 @IBAction func hozonButtton(_ sender : AnyObject) { 149 150 // Key の値を削除 151 userDefaults.removeObject(forKey: "NickName") 152 userDefaults.removeObject(forKey: "UserName") 153 userDefaults.removeObject(forKey: "SendEmail") 154 userDefaults.removeObject(forKey: "SendPhone") 155 userDefaults.removeObject(forKey: "NextsendEmail") 156 userDefaults.removeObject(forKey: "NextSendPhone") 157 158 159 160 userDefaults.set(true, forKey: "NickName") 161 let str: String = userDefaults.object(forKey: "NickName") as! String 162 nickNameLabel.text = str 163 164 userDefaults.set(true, forKey: "UserName") 165 let _: String = userDefaults.object(forKey: "UserName") as! String 166 nickNameLabel.text = str 167 168 userDefaults.set(true, forKey: "SendEmail") 169 let _: String = userDefaults.object(forKey: "SendEmail") as! String 170 nickNameLabel.text = str 171 172 userDefaults.set(true, forKey: "SendPhone") 173 let _: String = userDefaults.object(forKey: "SendPhone") as! String 174 nickNameLabel.text = str 175 176 userDefaults.set(true, forKey: "NextSendemail") 177 let _: String = userDefaults.object(forKey: "NextSendEmail") as! String 178 nickNameLabel.text = str 179 180 userDefaults.set(true, forKey: "NextSendPhone") 181 let _: String = userDefaults.object(forKey: "NextSendPhone") as! String 182 nickNameLabel.text = str 183 184 nickNameLabel.text = str 185 userNameLabel.text = str 186 sendEmailLabel.text = str 187 sendPhoneLabel.text = str 188 nextSendEmailLabel.text = str 189 nextSendPhoneLabel.text = str 190 191 192 print() 193 194 } 195 196 197}

投稿2020/04/13 15:50

Tetsukick

総合スコア297

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eijirou

2020/04/13 16:19

ありがとうございます。 さっそく入れてみました。 unc readData(key: String) -> String { let str: String = userDefaults.object(forKey: key) as! String return str しかし、ここでも hread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value エラーが出ました。 そしたら、viewDidloadの userDefaults.register(defaults: ["NickName": "ニックネームを入力"]) nickNameLabel.text = readData("NickName") (6コードとも)赤帯が出て これに書き換えろって言われて書き直しました。 userDefaults.register(defaults: ["NickName": "ニックネームを入力"]) nickNameLabel.text = readData(key: "NickName")
Tetsukick

2020/04/13 16:22

あ、引数名を書き忘れてましたね。。 修正後、動きましたか?
Tetsukick

2020/04/13 16:26

再度落ちてしまったんですね、、 では、readData()を以下に書き換えてください。 func readData(key: String) -> String { let config = UserDefaults.standard let str: String = config.string(forKey: key) ?? "" return str }
Eijirou

2020/04/13 16:38

ビルドしました。 問題1:textFieldに入力したtextが全てのtextLabelに表示されます。 問題2:「保存ボタン」を押すとエラーが出ました。 Thread 1: Exception: "-[KidsSosApp.SettingsViewController hozonButton:]: unrecognized selector sent to instance 0x7fd842830a00"
Eijirou

2020/04/13 16:39

ちょっと進みましたね! 全然思いつかないです。 スクリーンショットを撮りましたが投稿は出来ないんですね。
Eijirou

2020/04/13 16:41

問題1に関して、nickNameなので「ニックネーム」を入れたら、全てのTextFieldに「ニックネーム」と表示されました。
Tetsukick

2020/04/13 16:44

別課題として起票いただければ、再度スクショをあげれると思います
Eijirou

2020/04/13 16:50

nickNameTextFieldに「サル」と入力したらnickNameTextLabelに「サル」と表示させたい。 nameTextFieldに「キジ」と入力したらnameTextLabelに「キジ」 emailTextFieldに「aaa@gmail.com」と記入したらtextLabelに「aaa@gmail.com」とそれぞれの 値を表示さてないです。
Eijirou

2020/04/13 17:13

あれ?写真は1枚しかあげられないんですか?
guest

0

ベストな書き方ではないと思いますが、次のようにしてはどうでしょうか。

Swift

1let config = UserDefaults.standard 2let _: String = config.string(forKey: "UserName") == nil ? "" : config.string(forKey: "UserName")! 3

投稿2020/04/13 15:18

freemann

総合スコア264

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/13 15:35

初期値の登録が保証されてれば、!でも問題ないと思いますが、どう思います?
Tetsukick

2020/04/13 16:11

↑よりは、エルビス演算子使って、以下の方がベストですね。強制アンラップせずにできるので。 let _: String = config.string(forKey: "UserName") ?? ""
退会済みユーザー

退会済みユーザー

2020/04/13 16:14 編集

最近落ちないって確信できる部分は!ってしちゃうんだけど、??のがいいのかな?
Tetsukick

2020/04/13 16:18

絶対に落ちないところなら別にいいと思います! プログラムの観点では、強制アンラップを使用しない「??」のがベターですね。 nilになることが100%ない設計になるので。
退会済みユーザー

退会済みユーザー

2020/04/13 16:29

なるほど、betterですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問