前提・実現したいこと
Swift/Xcodeの練習で簡単な年齢計算アプリを作ろうとしていたのですが
日付の取得、計算の部分のコードにエラーが発生しています
どうしたら直りますでしょうか。。。
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
Swift初心者です。初めて投稿します。 特訓として誕生日計算のコードを組もうとしていたのですが、上記エラーが出てしまいます。
該当のソースコード
Swift
1 2import UIKit 3 4 5 6 7class ViewController: UIViewController { 8 9 @IBOutlet weak var yearTextField: UITextField! 10 @IBOutlet weak var monthTextField: UITextField! 11 @IBOutlet weak var dayTextField: UITextField! 12 @IBOutlet weak var resultLabel: UILabel! 13 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 // Do any additional setup after loading the view, typically from a nib. 18 19 } 20 21 22 23 @IBAction func resultButton(_ sender: Any) { 24 let date:Date = Date() 25 let format = DateFormatter() 26 format.dateFormat = "yyyy" 27 let sDate = format.string(from: date) 28 29 30 let date2:Date = Date() 31 let format2 = DateFormatter() 32 format.dateFormat = "MM" 33 let sDate2 = format2.string(from: date2) 34 35 36 let date3:Date = Date() 37 let format3 = DateFormatter() 38 format.dateFormat = "DD" 39 let sDate3 = format3.string(from: date3) 40 41 42 43 let myYear: Int = Int(yearTextField.text!)! 44 var yourAge = Int(sDate)! - myYear 45 46 let myMonths: Int = Int(monthTextField.text!)! 47 let myDay: Int = Int(dayTextField.text!)! 48 49 //↓でエラーが出ています 50 if Int(sDate2)! < myMonths && Int(sDate3)! < myDay { 51 yourAge = yourAge - 1 52 resultLabel.text! = "あなたの年齢は" + (String(yourAge)) + "歳です" 53 54 }else if Int(sDate2)! < myMonths && Int(sDate3)! > myDay { 55 yourAge = yourAge - 1 56 resultLabel.text! = "あなたの年齢は" + (String(yourAge)) + "歳です" 57 58 }else if Int(sDate2)! > myMonths && Int(sDate3)! < myDay { 59 yourAge = yourAge - 1 60 resultLabel.text! = "あなたの年齢は" + (String(yourAge)) + "歳です" 61 62 }else { 63 resultLabel.text! = "あなたの年齢は" + (String(yourAge)) + "歳です" 64 } 65 66 67 68 }
試したこと
同じエラーが出ている方の記事などを参考に手を加えたりしたのですが
なかなか直せませんでした。。。
補足情報(FW/ツールのバージョンなど)
Swift4.2 Xcode10です
お力添えのほどよろしくお願いいたします。
「試したこと」でエラーについて貴殿がどのように考え、どのように修正しようとしたのか、もご提示いただくとよろしいと思います。また、問題が発生した場合、必要最小限の再現コードにして確認した方がご自身にとっても問題の切り分けや、問題のポイントが明確になるかと思います。
@t_obara 様
ご指摘ありがとうございます。
エラーについて調べ、不要なものをつけたり取ったり移動したりと、
かなり的外れなことなども多々したと思うのですが、ここの投稿も初なもので、
どの程度の詳細が必要なのか把握できておりませんでした。
順を追って修正させていただきます。
また必要最小限の再現コードにつきましても、
これまた初心者すぎてどの程度まで記載すればご理解いただけるのか
皆目見当がつきませんでした。そのためまるっと載せてしまいました。
その点につきましても精進してまいります。
if Int(sDate2)! < myMonths && Int(sDate3)! < myDay {
この行でエラーが出ているのであれば、ここに出てくる変数の値くらいは調べて書いて下さい。
@fuzzball 様
ご指摘ありがとうございます。
回答2件
あなたの回答
tips
プレビュー