//
import SwiftUI
import RealmSwift
struct HomeView: View {
@ObservedResults(MemoDataModel.self) var memoDataList
var body: some View {
NavigationStack {
VStack {
memoList
// Spacerを下に入れることで、メモ一覧を上に詰めるように表示させる
Spacer()
}
// NavigationBarに設置するボタンなどを定義
.toolbar {
// 右上:新規メモ作成
ToolbarItem(placement: .navigationBarTrailing) {
}
}
}
}
/// メモ一覧.
var memoList: some View {
List {
ForEach(memoDataList, id: \.self) { memo in
NavigationLink(
destination:
MemoDetailView(memoData: memo)
) {
memoCell(memo)
}
}
}
.listStyle(.plain)
}
/// メモ作成ボタン.
var memoCreateLinkButton: some View {
// NavigationLinkはTextだけでなく画像やViewでも設定できる
NavigationLink(
// onAppearで生成した新しいMemoDataを渡す
destination:
MemoDetailView(memoData: MemoDataModel())
) {
Image(systemName: "plus")
}
}
}
// MARK: View Components
extension HomeView {
/// メモ一覧に表示するセル.
func memoCell(_ memo: MemoDataModel) -> some View {
VStack(alignment: .leading) {
// メモのテキスト
Text(memo.text)
.font(.body)
// メモの作成・編集日時
Text(formatDate.string(from: memo.recordDate))
.font(.footnote)
}
}
}
extension HomeView {
// 表示形式を変更した日付
var formatDate: DateFormatter {
let formatter = DateFormatter()
// Apple が推奨する固定フォーマット用ロケール
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(identifier: "UTC")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
return formatter
}
}
#Preview {
HomeView()
}