Обертывание вида uikit с помощью инициализатора, который может бросить в экран SwiftuiIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Обертывание вида uikit с помощью инициализатора, который может бросить в экран Swiftui

Сообщение Anonymous »

Я хотел бы знать, существует ли хороший способ обернуть uikit внутри Swiftui, когда инициализатор компонента uikit может добавить ошибку.

Код: Выделить всё

struct Wrap: UIViewRepresentable {
typealias Updater = (Wrapped, Context) -> Void

var makeView: () -> Wrapped
var update: (Wrapped, Context) -> Void

init(_ makeView: @escaping @autoclosure () -> Wrapped,
updater update: @escaping Updater) {
self.makeView = makeView
self.update = update
}

func makeUIView(context: Context) -> Wrapped {
makeView()
}

func updateUIView(_ view: Wrapped, context: Context) {
update(view, context)
}
}

extension Wrap {
init(_ makeView: @escaping @autoclosure () -> Wrapped,
updater update: @escaping (Wrapped) -> Void) {
self.makeView = makeView
self.update = { view, _ in update(view) }
}

init(_ makeView: @escaping @autoclosure () -> Wrapped) {
self.makeView = makeView
self.update = { _, _ in }
}
}
< /code>
Теперь проблема в том, что, если у класса uikit есть инициализатор, который может добавить ошибку, пытаясь использовать его на экране Swiftui не будет компилировать: < /p>
final class MyView: UIView {

init(text: String) throws {
throw NSError(domain: NSOSStatusErrorDomain, code: 20)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Мое понимание такова, что Swiftui не может справиться с этой ситуацией нормально, так что, как будет лучше, чтобы справиться с этой ситуацией в «Swiftu». /> edit (acliciation): < /strong> Я попадаю в эту ошибку компиляции, потому что инициализатор моего представления My Uikit может бросить - декларативное тело Swiftui не поддерживает напрямую, но иногда вы зависите от модуля с представлением, который вы не контролируете. Моя цель не в том, чтобы обсудить, должны ли представления выбросить, как указывают некоторые комментарии, а исследовать практические способы обернуть бросающий uiview в Swiftui. Например, должен ли я:
  • Похватить и заменить его пустым ревизором или настраиваемого отказа? Результат ?


Подробнее здесь: https://stackoverflow.com/questions/786 ... tui-screen
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»