如何在swiftUI中每天检查日期

xfb7svmp  于 2022-11-21  发布在  Swift
关注(0)|答案(3)|浏览(136)

我是swiftUI的新手。现在,我正在开发一个应用程序,它可以记录你的任务进度。在应用程序中,我需要用用户每天的目标来填充列表我知道我们可以在故事板中使用app delegate,但是对于SwiftUI,在应用CoreData Manager之后,app delegate已经消失,我们使用app.swift代替,我现在该在哪里结账?2谢谢!

ruoxqz4g

ruoxqz4g1#

根据Leo Dabus关于监视NSCalendarDayChanged通知的建议,这里有一些代码显示了如何在SwiftUI中完成这一操作。

import SwiftUI

struct ContentView: View {

    @ObservedObject var viewModel = ContentViewModel()

    var body: some View {
        VStack {
            Text(viewModel.displayDate)
            // List of goals
        }
    }
}

class ContentViewModel: ObservableObject {

    @Published var currentDate: Date = Date()

    var displayDate: String {
        Self.simpleDateFormatter.string(from: currentDate)
    }

    private static let simpleDateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "MMMM d"
        return formatter
    }()

    init() {
        NotificationCenter.default.addObserver(self, selector: #selector(dayDidChange), name: .NSCalendarDayChanged, object: nil)
    }

    @objc
    func dayDidChange() {
        currentDate = Date()
    }
}
nkcskrwz

nkcskrwz2#

1.您可以在AppDelegate中使用- (void)applicationSignificantTimeChange:(UIApplication *)application;来监视这类变更。
1.您也可以在AppDelegate UIApplication.significantTimeChangeNotification中注册通知。iOS将同时调用已注册的通知方法以及上述委托方法。
第一个
1.如果您想直接连接SwiftUI,您可以向发布者注册Swift视图。发布者将监听通知名称UIApplication.significantTimeChangeNotification
可以根据您的要求使用任何一种方式。

struct ContentView: View {
    @State var dayDetails: String = "Hello World"
    var body: some View {
        Text(dayDetails)
            .padding().onReceive(NotificationCenter.default.publisher(for: UIApplication.significantTimeChangeNotification), perform: { _ in
                dayDetails = "Day has changed"
            })
    }
}
slhcrj9b

slhcrj9b3#

您可以使用NSCalendarDayChanged通知在日期更改时执行一些代码。

struct ContentView: View {
@State var text: String = "Hello World"
var body: some View {
    Text(text)
        .onReceive(NotificationCenter.default.publisher(for: Notification.Name.NSCalendarDayChanged)) { _ in
            text = "Day has changed"
        })
    }
}

相关问题