質問するログイン新規登録
Swift

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

Q&A

1回答

271閲覧

日付をText表示したい

hanaxjqn

総合スコア0

Swift

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

0グッド

0クリップ

投稿2023/06/06 05:29

0

0

実現したいこと

日付を表示したい

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

Cannot use instance member 'dateFormatter' within property initializer; property initializers run before 'self' is available

該当のソースコード

swift

1 2let dateFormatter = DateFormatter() 3let str = dateFormatter.string(from: Date()) 4Text(str)

試したこと

let dateFormatter = DateFormatter()
let str = dateFormatter.string(from: Date())
をbodyの後ろに記述

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

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

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

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

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

hoshi-takanori

2023/06/06 07:31

そのソースコードをどこに書いたかの問題な気がしますね…。
guest

回答1

0

バージョンが異なるかもしれませんが、iOS15からFormatStyleというのが登場しました。これでFormatterを作成せずに色々なデータを直接 Text で表示することが可能になりました。

そのため、iOS15以降の場合は以下のように記述すると表示されると思います。

swift

1import SwiftUI 2 3struct ContentView: View { 4 let date: Date = Date() 5 var body: some View { 6 Text(date, format: Date.FormatStyle.dateTime) 7 } 8}

また、以下のような実装方法もあります。解説については「リアルタイム日時を表示する方法」を参考にしてください。

swift

1@State var dateText = "" 2@State var nowDate = Date() 3private let dateFormatter = DateFormatter() 4init() { 5 dateFormatter.dateFormat = "YYYY/MM/dd(E) \nHH:mm:ss" 6 dateFormatter.locale = Locale(identifier: "ja_jp") 7} 8var body: some View { 9 Text(dateText.isEmpty ? "\(dateFormatter.string(from: nowDate))" : dateText) 10 .onAppear { 11 Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in 12 self.nowDate = Date() 13 dateText = "\(dateFormatter.string(from: nowDate))" 14 } 15 } 16}

エラーコードの解説

エラーコード

Cannot use instance member 'dateFormatter' within property initializer; property initializers run before 'self' is available
は日本語では以下のように訳すことができます。
プロパティ初期化の中でインスタンスメンバー 'dateFormatter' を使うことはできません。プロパティ初期化は 'self' が利用可能になる前に実行されます
このエラーはSwiftUIに限らず、Swift全般で発生するエラーです。

Swiftでは、クラスや構造体が作成されるときに、その中のプロパティ(letvarだと思って構いません)が初めて値を持つことを「初期化」と言いいます。

この初期化をするタイミングがとても重要です。

エラーメッセージに登場したselfとは、クラスや構造体自身を指す単語です。Swiftの言語仕様では、selfは「初期化してから使うもの」という決まりがあります。

今回、dateFormatterというインスタンスメンバーを初期化する前に使用したため、このようなエラーが発生しました。

投稿2023/06/20 15:23

Ktombow1110

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問