Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

381
Visualizações
Proyecto Swift con Javascript comunicación bidireccional

Estoy creando una aplicación iOS Swift y me gustaría tener una comunicación bidireccional con javascript. Desde javascript necesito escuchar mensajes (json) y enviar jsons. Sé que hay muchas publicaciones que resuelven este problema, pero no puedo hacerlo funcionar porque soy nuevo en el desarrollo de iOS.

Por lo que veo en otras respuestas y/u otras páginas de tutoriales como medium, para hacer esto construyen una clase que implementa el protocolo UIViewController. Pero mi vista es una estructura que implementa el protocolo Vista. ¿Cómo puedo llamar a esta clase con el protocolo UIViewController desde mi vista? ¿Es posible?

Para simplificar las cosas, primero agregué un WebView de WebKit a View usando una estructura y las funciones:

 func makeUIView(context: Context) -> WKWebView func updateUIView(_ uiView: WKWebView, context: Context)

Esto funcionó bien. Ahora debo agregar la compatibilidad con javascript.

Entonces, si sigo los ejemplos de UIViewController que encontré, veo que debo agregar:

 let config = WKWebViewConfiguration() config.userContentController.add(self, name: doSomething) // I'm seeing an error here

el error es:

 Argument type 'SwiftUIWebView' does not conform to expected type 'WKScriptMessageHandler'

Así que aquí trato de agregar 'WKScriptMessageHandler' a la estructura (lo mismo sucede si hago una extensión):

 struct SwiftUIWebView: UIViewRepresentable, WKScriptMessageHandler // Another a couple errors are shown

Los errores son:

 1. Non-class type 'SwiftUIWebView' cannot conform to class protocol 'NSObjectProtocol' 2. Non-class type 'SwiftUIWebView' cannot conform to class protocol 'WKScriptMessageHandler'

Entonces pienso, ok, cambiemos de estructura a clase. Ahora se muestran aún más errores. Algunos de estos están en las dos funciones que hice para el WebView original y tienen errores, en el mismo orden que el anterior:

 1. Protocol 'UIViewRepresentable' requirement 'makeUIView(context:)' cannot be satisfied by a non-final class ('SwiftUIWebView') because it uses 'Self' in a non-parameter, non-result type position 2. Protocol 'UIViewRepresentable' requirement 'updateUIView(_:context:)' cannot be satisfied by a non-final class ('SwiftUIWebView') because it uses 'Self' in a non-parameter, non-result type position

Así que no creo que esté en el camino correcto.

Por lo que pude descifrar, creo que estas clases que implementan el protocolo UIViewController son las vistas de proyectos basados en guiones gráficos. Por ejemplo, este enlace es uno de los enlaces que seguí porque tiene un repositorio de GitHub vinculado y no son solo fragmentos de código.

¿Puedo tener esta funcionalidad en un proyecto de Swift? Y si es así, ¿cómo?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Las vistas de SwiftUI deben ser struct , por lo que debe crear una class separada que se ajuste al protocolo WKScriptMessageHandler y almacenar una instancia de esa clase en su WebView .

 struct WebView: UIViewRepresentable { private let messageHandler: WebKitMessageHandler init(messageHandler: WebKitMessageHandler) { self.messageHandler = messageHandler } func makeUIView(context: Context) -> WKWebView { let config = WKWebViewConfiguration() config.userContentController.add(messageHandler, name: "name") // pass appropriate frame here let webView = WKWebView(frame: CGRect.zero, configuration: config) return webView } func updateUIView(_ uiView: WKWebView, context: Context) { } } class WebKitMessageHandler: NSObject, WKScriptMessageHandler { func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda