尝试此示例方法,选择
calendar
和
calendars
在您的
ContentView
,至少作为一种测试。
注意拥有的重要性
.tag(Optional(calendar))
在Picker中。
当然,您需要在应用程序沙盒设置中启用日历,
并且在您的EKEventStore中有一些日历,否则您将只看到“无选择”。
struct ContentView: View {
@State private var calendar: EKCalendar? // <--- here
@State private var calendars: [EKCalendar] = [] // <--- here
let eventStore : EKEventStore = EKEventStore()
var body: some View {
VStack {
Picker("Select a calendar", selection: $calendar) {
Text("no selection").tag(Optional<EKCalendar>.none)
ForEach(calendars, id: \.self) { calendar in
Text(calendar.title)
.tag(Optional(calendar)) // <--- here
}
}
.pickerStyle(.menu)
}
.onAppear {
// --- here
for source in eventStore.sources {
calendars = calendars + source.calendars(for: .event).sorted{ $0.title < $1.title }
}
print("----> calendars: \(calendars.count)") // for testing info
}
}
}
注意,您还需要授予(用户请求)访问各种
日历。