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

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

新規登録して質問してみよう
ただいま回答率
87.20%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Swift

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

解決済

swift nilエラーの解消法が分かりません…

KaoruYoshida
KaoruYoshida

総合スコア15

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Swift

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

1回答

0評価

0クリップ

189閲覧

投稿2022/05/04 02:26

前提

Calendarを表示し、選択日と今日の日付の差を取り出すシステムを作っております。
取り出す値はdate型で、それをString型、そしてInt型に変換した後、引き算をしています。
その後、Textとして表示させるためにString型に変換しています。

Calendarには、FSCalendarというライブラリを用いています。

実現したいこと

  • 選択日をInt型で取り出せるようにしたい
  • 選択日の変数がnilにならないようにしたい

発生している問題・エラーメッセージ

選択日をdate型で取り出し、String型に変換した後、Int型に変換する際のコードで以下のようなnilエラーになってしまう。

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

おそらく、ページを読み込んだ時点ではまだ選択されていないため、選択日が存在せずnilだと認識されてしまうから起こるエラーだと思っています。

そこで疑問なのが、

func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) { //date -> string let selecteddate = dateFormatter.string(from: date) selectedDate = selecteddate } let selectedInt:Int = Int(selectedDate)!//ここでエラー let differ = selectedInt-todayInt let differString:String = String(differ)

の居場所が分からない。
struct CalendarTestViewの中なのか??
SwiftUI初心者なので、理由含め教えてくだされば幸いです。

全体のコードはこちらです↓

該当のソースコード

変数は、

今日の
date型:dt
String型:todayString
Int型:todayInt

選択日の
date型:date
String型:selectedString
Int型:selectedInt

(選択日)ー(今日)はInt型のdifferという変数で表しています。

SwiftUI

import SwiftUI import FSCalendar import UIKit struct CalendarTestView: UIViewRepresentable { func makeUIView(context: Context) -> UIView { typealias UIViewType = FSCalendar let fsCalendar = FSCalendar() fsCalendar.delegate = context.coordinator fsCalendar.dataSource = context.coordinator return fsCalendar } func updateUIView(_ uiView: UIView, context: Context) { } func makeCoordinator() -> Coordinator{ return Coordinator(self) } class Coordinator: NSObject, FSCalendarDelegate, FSCalendarDataSource { var parent:CalendarTestView init(_ parent:CalendarTestView){ self.parent = parent } } } //残り日数の処理 var dateFormatter: DateFormatter { let dateFormatter = DateFormatter() dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "D", options: 0, locale: Locale(identifier: "en_US")) return dateFormatter } let dt = Date() let todayString = dateFormatter.string(from: dt) let todayInt:Int = Int(todayString)! var selectedDate: String = "date" func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) { //date -> string let selecteddate = dateFormatter.string(from: date) print(selecteddate) selectedDate = selecteddate } let selectedInt:Int = Int(selectedDate)!//ここでnilエラーが出てしまう let differ = selectedInt-todayInt let differString:String = String(differ) struct CalendarApealView: View { @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode> var body: some View { VStack(){ Text("When did you start this food style?") .font(.title2) CalendarTestView() Text(differString) .font(.title) .padding() Button(action: { self.presentationMode.wrappedValue.dismiss() }) { Text("confirm") .font(.title2) .padding(15) .background(Color.green) .foregroundColor(Color.white) .cornerRadius(10) } } } } struct CalendarTestView_Previews: PreviewProvider { static var previews: some View { CalendarApealView() } }

補足情報(FW/ツールのバージョンなど)

macOS バージョン12.3.1
2.6 GHz 6コアIntel Core i7
Xcodeバージョン13.3.1

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Swift

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