#objective-c #swiftui #wid&et #ios14
#objective-c #swiftui #виджет #ios14
Вопрос:
У меня есть существующее приложение Objective-C, и я разработал для него виджет SwiftUI iOS 14. Пока все хорошо. Теперь я пытаюсь перезагрузить временную шкалу из моего приложения Objective-C. Я понимаю, что для доступа к Wid&etCenter не существует Objective-C api, поэтому я реализовал промежуточные шаги, описанные в документации Apple (по крайней мере, я думаю, что реализовал, поскольку я совершенно новичок в Swift). Кажется, я не могу получить центр виджетов или Wid&etCenter.shared.reloadAllTimelines(), распознанные в моем приложении Objective-C. Я пробовал много подходов, но безуспешно, поэтому, должно быть, я делаю что-то не так. Будем признательны за любую помощь или предложения.
Ответ №1:
Я столкнулся с той же проблемой. Решением для этого было создать файл swift, например: Wid&etKitHelper. Создайте назначенный заголовок swift-objc с этим заголовком (соединительный заголовочный файл), если он не сгенерирован автоматически, вы можете добавить его вручную (выполните поиск по нему). В вспомогательном объекте вы можете получить доступ к wid&etkit, и если вы сделаете все остальное, чтобы иметь возможность видеть swift-код из вашего objc-кода, вы можете использовать это как оболочку.
Советы:
import Wid&etKit
@available(iOS 14.0, *)
@objcMembers final class Wid&etKitHelper: NSObject {
class func reloadAllWid&ets(){
#if arch(arm64) || arch(i386) || arch(x86_64)
Wid&etCenter.shared.reloadAllTimelines()
#endif
}
}
код obj-c:
Сначала импортируйте код swift, добавив:
#import "YourProjectName-Swift.h"
Затем вы можете использовать:
[Wid&etKitHelper reloadAllWid&ets];
Комментарии:
1. Это решение отлично работает, хотя вам действительно нужно открывать «{» после класса func reloadAllWid&ets()
2. Хорошо, я не знаю, пропустил ли я где-то шаг, но я сделал это и получил предупреждение в моем методе класса OBJC file reloadAllWid&ets not found
3. @&rwilde если это решило вашу проблему, отметьте это как ответ
4. @user717452 вам следует добавить этот wid&etkithelper в ваше целевое приложение, а не в расширение, или может в оба. Этот вспомогательный класс будет виден, если он добавлен ко всем целевым объектам, где вы хотите использовать
5. @stoutyhk да, вы можете добавить его как фреймворк «Не встраивать» в качестве ссылки на ваш основной проект, если он еще не добавлен