Обмен данными с AppGroup

Я хочу поделиться одной переменной из моего файла UIKit с моим расширением виджетов, созданным с помощью SwiftUI. Я следил за этим здесь. Посмотрите ответ Дж. Аранго.

Но я не понимаю последней части. Я должен использовать import MySharedObjects.

Итак, я сделал это:

    import MySharedObject

struct testing {
    let mySharedObject = MySharedObject(name: "My Name", lastName: "My Last Name")
                       
     do {
         let data = try JSONEncoder().encode(mySharedObject)
    
          /// Make sure to use your "App Group" container suite name when saving and retrieving the object from UserDefaults
          let container = UserDefaults(suiteName:"group.com.widgetTest.widgetContainer")
              container?.setValue(data, forKey: "sharedObject")
                            
          /// Used to let the widget extension to reload the timeline
          WidgetCenter.shared.reloadAllTimelines()
    
          } catch {
            print("Unable to encode WidgetDay: \(error.localizedDescription)")
       }
}

Но получаю следующие ошибки.

  • Дополнительный аргумент в позиции # 1, # 2 в вызове
  • Отсутствует аргумент для параметра из вызова
  • вставить из: ‹# Decoder #›
  • ожидаемое объявление, где я использую часть do.

person submariner    schedule 21.09.2020    source источник
comment
Это может вам помочь: Обмен данными между основное приложение и виджет в SwiftUI для iOS 14 Если это всего лишь одна переменная, вы можете использовать общую UserDefaults. А зачем тебе MySharedObjects?   -  person pawello2222    schedule 21.09.2020
comment
Должен признаться, что не понимаю, что объясняет этот человек. Он создает текстовый файл и хранит там данные?   -  person submariner    schedule 21.09.2020


Ответы (1)


  1. Сохраните данные в UserDefaults в основном приложении:
UserDefaults(suiteName: <your_app_group>)!.set("test", forKey: "test")
  1. Считайте данные из UserDefaults в своем виджете:
let testStr = UserDefaults(suiteName: <your_app_group>)!.string(forKey: "test")

Если вы хотите сохранить другие типы, см.:

person pawello2222    schedule 21.09.2020
comment
Спасибо, сработало. Это было намного проще, чем я думал. Я тестировал его с помощью основного приложения как SwiftUI и виджета как SwiftUI. Завтра я проверю, работает ли это с моим основным приложением как Storyboard и Widget как SwiftUI. - person submariner; 21.09.2020