Long press widget – Edit widget – select card type

import WidgetKit import SwiftUI import Intents struct Provider: IntentTimelineProvider { func placeholder(in context: Context) -> SimpleEntry { SimpleEntry(date: Date(), configuration: SelectCharacterIntent()) } func getSnapshot(for configuration: SelectCharacterIntent, in context: Context, completion: @escaping (SimpleEntry) -> ()) { let entry = SimpleEntry(date: Date(), configuration: configuration) completion(entry) } func getTimeline(for configuration: SelectCharacterIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) { var entries: [SimpleEntry] = [] // Generate a timeline consisting of five entries an hour apart, starting from the current date. let currentDate = Date() for hourOffset in 0 .. < 5 { let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! let entry = SimpleEntry(date: entryDate, configuration: configuration) entries.append(entry) } let timeline = Timeline(entries: entries, policy: .atEnd) completion(timeline) } } struct SimpleEntry: TimelineEntry { let date: Date let configuration: SelectCharacterIntent } struct WidgetExtensionEntryView : View { var entry: Provider.Entry var selectCharList: [String] { entry.configuration.SelectedCardType? .map{ $0.identifier } as! [String] } var body: some View { Text(entry.date, style: .time) // Text(entry.configuration.BigListOne? .identifier ?? "") Text(selectCharList.joined()) // Text(entry.configuration.parameter ?? "") } } @main struct WidgetExtension: Widget { let kind: String = "WidgetExtension" var body: some WidgetConfiguration { IntentConfiguration(kind: kind, intent: SelectCharacterIntent.self, provider: Provider()) { entry in WidgetExtensionEntryView(entry: entry) } .configurationDisplayName("My Widget") .description("This is an example widget.") } } struct WidgetExtension_Previews: PreviewProvider { static var previews: some View { WidgetExtensionEntryView(entry: SimpleEntry(date: Date(), configuration: SelectCharacterIntent())) .previewContext(WidgetPreviewContext(family: .systemSmall)) } }Copy the code

Import the Intents class IntentHandler: INExtension, SelectCharacterIntentHandling {/ / / / / / - click on the selected card types array Parameters: /// - intent: intent description /// - completion: completion description func provideSelectedCardTypeOptionsCollection(for intent: SelectCharacterIntent, with completion: @escaping (INObjectCollection<Cardtype>? , Error?) -> Swift.Void) { let currentList = intent.SelectedCardType? .map{ $0.identifier } var cardList = [Cardtype]() for idx in 0... 9 { let card = Cardtype(identifier: "\(idx)", display: "display --- \(idx)", subtitle: "subtitle --- \(idx)", image: nil) if ! (currentList? .contains("\(idx)") ?? false) { cardList.append(card) } } completion(INObjectCollection(items: CardList), nil)} / / / / / / the default has chosen a good card types - Parameter intent: the current processing components of intent / / / - Returns: Func defaultSelectedCardType(for intent: SelectCharacterIntent) -> [Cardtype]? { var cardList = [Cardtype]() for idx in 0... 9 { let card = Cardtype(identifier: "\(idx)", display: "display --- \(idx)", subtitle: "subtitle --- \(idx)", image: nil) cardList.append(card) } return cardList } override func handler(for intent: INIntent) -> Any { // This is the default implementation. If you want different objects to handle different intents, // you can override this and return the handler you want for that particular intent. return self } }Copy the code