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

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

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

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

Swift

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

解決済

値渡しした変数を別viewで型変換するとnilになってしまいます…

KaoruYoshida
runrun

総合スコア18

変数

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

Swift

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

1回答

0評価

0クリップ

204閲覧

投稿2022/06/04 12:23

編集2022/06/05 18:22

前提

Calendarを表示し、選択日と今日の日付の差を取り出して
それを別のビューで四則演算をするシステムを作っております。

まずCalendarTestView内では、
選択日から今日までの日数をdayStringという変数で定義し、
それを@BindingでString型で定義したdayとして返しています。

そのdayをAchievementViewに値渡しし四則演算したいです。

値渡しし、AchivementViewでTextとして表示できたのですが、それをIntに型変換する際にnilエラーが出てしまいます。

実現したいこと

  • AchievementView内でdayを四則演算したい

エラーメッセージ

下のソースコードで「ここでエラー」と書いてあるところ、
dayをInt型に変換しているところに以下のエラーメッセージが発生しました。

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

dayがなぜnilになっているのか?どのように変えたらnilで無くなるのか?
SwiftUI初心者なので、理由含め教えてくだされば幸いです。

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

該当のソースコード

CalendarTestView.swift

import SwiftUI import FSCalendar import UIKit struct CalendarTestView: UIViewRepresentable { @Binding var selectedDate: Date 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 } func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) { // ***** 選択した日付をバインディングのselectedDateへ設定します parent.selectedDate = date } } } struct CalendarApealView: View { @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode> @State private var date: Date = Date() @Binding var day: String //ここでdayを定義?? var differString: String { let calendar = Calendar.current //today1は今日の日付 let today1 = Date() let today2 = calendar.dateComponents([.year, .month, .day], from: today1) let today3 = calendar.date(from: DateComponents(year: today2.year, month: today2.month, day: today2.day))! let date2 = calendar.dateComponents([.year, .month, .day], from: date) let date3 = calendar.date(from: DateComponents(year: date2.year, month: date2.month, day: date2.day))! let result = calendar.dateComponents([.day], from: date3, to: today3) // UserDefaults.standard.set(differString, forKey: "differString") return "\(result.day!)" } var body: some View { VStack(){ Text("When did you start this food style?") .font(.title2) CalendarTestView(selectedDate: $date) .frame(height: 400) HStack(){ Text(differString) .font(.title) .padding() .foregroundColor(Color(red: 0.324, green: 0.758, blue: 0.49)) Text("Days") .font(.title2) } Button(action: { day = differString self.presentationMode.wrappedValue.dismiss() }) { Text("confirm") .font(.title2) .padding(16) .background(Color(red: 0.324, green: 0.758, blue: 0.49)) .foregroundColor(Color.white) .cornerRadius(10) } } } }

AchievementView.com

struct AchievementView: View { @State var showsheet: Bool = false @State var showinfo: Bool = false init(){ //ナビゲーションバーの背景色の設定 UINavigationBar.appearance().barTintColor = greenColor } @State private var day = "" @State private var isShowSubView = false var body: some View { NavigationView { HStack { ZStack { VStack{ HStack { ScrollView{ Image("IMG_7771") .resizable() .clipShape(Circle()) .overlay(Circle().stroke(Color.white, lineWidth: 2)) .frame(width: 100, height: 100) .shadow(radius: 5) Text("Name") .font(.title) Text("Name Record ...") .font(.title) HStack{ Text(day) .font(.largeTitle) .foregroundColor(Color(red: 0.324, green: 0.758, blue: 0.49)) Text("DAYS") .padding() .font(.title) Button(action: { self.isShowSubView = true }, label: { Text("edit") .foregroundColor(Color.gray) }) NavigationLink(destination: CalendarApealView(day: $day), isActive: $isShowSubView) { EmptyView() } } HStack{ Text("\((Int(day))!*100)") //ここでエラー .font(.largeTitle) .foregroundColor(Color(red: 0.324, green: 0.758, blue: 0.49)) Text("L") .padding(.leading, 40) .font(.title) } } } } } } .navigationTitle("Achievement") .toolbar{ ToolbarItemGroup(placement: .navigationBarTrailing) { Button { showsheet.toggle() } label: { Label("Setting", systemImage: "gearshape") } .sheet(isPresented: $showsheet, content: { SettingView() }) } } } } }

補足情報(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++と共存することが意図されています