¿Cómo se hace para hacer un delegado, es decir, NSUserNotificationCenterDelegate
en forma rápida?
delegates
swift
delegation
usuario3718173
fuente
fuente
Respuestas:
No es tan diferente de obj-c. Primero, debe especificar el protocolo en su declaración de clase, como a continuación:
La implementación tendrá el siguiente aspecto:
Por supuesto, debe configurar el delegado. Por ejemplo:
fuente
@interface MyCustomClass: UIViewController <ClassIWantToUseDelegate>
, permitiéndole iniciar / configurar el viewcontroller, así como llamar a los métodos de delegado en las subvistas? Algo similar a esto ?Aquí hay una pequeña ayuda sobre los delegados entre dos controladores de vista:
Paso 1: Haga un protocolo en el UIViewController que eliminará / enviará los datos.
Paso 2: Declarar el delegado en la clase de envío (es decir, UIViewcontroller)
Paso 3: utilice el delegado en un método de clase para enviar los datos al método de recepción, que es cualquier método que adopte el protocolo.
Paso 4: adopte el protocolo en la clase receptora
Paso 5: Implemente el método delegado
Paso 6: configure el delegado en prepareForSegue:
Y eso debería funcionar. Por supuesto, esto es solo fragmentos de código, pero debería darle la idea. Para una larga explicación de este código, puede ir a la entrada de mi blog aquí:
segues y delegados
Si está interesado en lo que sucede debajo del capó con un delegado, escribí sobre eso aquí:
debajo del capó con delegados
fuente
weak
solo es necesario para clases, no estructuras y enumeraciones. Si el delegado va a ser una estructura o enumeración, entonces no debe preocuparse por los ciclos de retención. Sin embargo, el delegado es una clase (esto es cierto para muchos casos, ya que a menudo es un ViewController), entoncesweak
necesita declarar su protocolo como una clase. Hay más información aquí stackoverflow.com/a/34566876/296446Los delegados siempre me confundieron hasta que me di cuenta de que un delegado es solo una clase que hace algún trabajo para otra clase . Es como tener a alguien más allí para hacer todo el trabajo sucio por ti que no quieres hacer tú mismo.
Escribí una pequeña historia para ilustrar esto. Léelo en un patio de juegos si quieres.
Había una vez...
En resumen, hay tres partes clave para hacer y usar el patrón delegado.
Vida real
En comparación con nuestra historia Bossy Big Brother anterior, los delegados se utilizan a menudo para las siguientes aplicaciones prácticas:
La gran parte es que estas clases no necesitan saber nada de la otra con anterioridad, excepto que la clase delegada se ajusta al protocolo requerido.
Recomiendo leer los siguientes dos artículos. Me ayudaron a entender a los delegados incluso mejor que la documentación .
Una nota mas
Los delegados que hacen referencia a otras clases que no poseen deben usar la
weak
palabra clave para evitar ciclos de referencia fuertes. Vea esta respuesta para más detalles.fuente
Recibí algunas correcciones para publicar en @MakeAppPie
En primer lugar, cuando crea un protocolo de delegado, debe cumplir con el protocolo de clase. Como en el ejemplo a continuación.
En segundo lugar, su delegado debe ser débil para evitar retener el ciclo.
Por último, está a salvo porque su protocolo es un valor opcional. Eso significa que su mensaje "nulo" no se enviará a esta propiedad. Es similar a la declaración condicional
respondToselector
en objC pero aquí tiene todo en una línea:Arriba tienes un ejemplo de obj-C y debajo tienes un ejemplo Swift de cómo se ve.
fuente
delegate?.myMethod
no se bloqueará porque si delegado es,nil
entonces no pasaría nada. Sin embargo, si cometió un error y escribiódelegate!.myMethod
, podría bloquearse si no se establece un delegado, por lo que es básicamente una forma de estar seguro ...Aquí hay una esencia que puse juntos. Me preguntaba lo mismo y esto ayudó a mejorar mi comprensión. Abre esto en un Xcode Playground para ver qué está pasando.
fuente
UIViewController
clase se ajuste al delegado que hicimos? ¿Deben declararse en un archivo rápido? Cualquier ayuda significará mucho.class ViewController : UIViewController NameOfDelegate
.a.swift
acuerdo con su respuesta anterior, no apareceb.swift
. No puedo llegar a ninguna clase fuera de mi archivo rápido. cualquier hardts?DELEGADOS EN SWIFT 2
Estoy explicando con un ejemplo de Delegado con dos viewControllers. En este caso, SecondVC Object está enviando datos de vuelta al primer View Controller.
Clase con declaración de protocolo
En First ViewController Protocol, la conformidad se realiza aquí:
Definición del método de protocolo en First View Controller (ViewController)
Durante la inserción de SecondVC desde First View Controller (ViewController)
fuente
Primera clase:
Segunda clase:
fuente
Type 'ViewController' does not conform to protocol 'NetworkServiceDelegate'
favor, sugiéralo. Es mi sexto día en Swift :)Muy fácil paso a paso (100% de trabajo y probado)
Paso 1: Crear método en el primer controlador de vista
Paso 2: establecer delegado mientras se empuja al segundo controlador de vista
paso 3: establecer delegado como
clase ViewController: UIViewController, ProcessStatusDelegate {
Paso 4: Crear protocolo
paso5: toma una variable
Paso 6: Mientras regresa al método de delegado de llamadas del controlador de vista anterior, el primer controlador de vista notifica con datos
fuente
Ejemplo simple:
fuente
Los delegados son un patrón de diseño que permite que un objeto envíe mensajes a otro objeto cuando ocurre un evento específico. Imagine que un objeto A llama a un objeto B para realizar una acción. Una vez que se completa la acción, el objeto A debe saber que B ha completado la tarea y tomar las medidas necesarias, ¡esto se puede lograr con la ayuda de los delegados! Aquí hay un tutorial que implementa delegados paso a paso en Swift 3
Enlace tutorial
fuente
Las soluciones anteriores parecían un poco acopladas y, al mismo tiempo, evitan reutilizar el mismo protocolo en otros controladores, es por eso que he venido con la solución que es más tipada con un borrado de tipo genérico.
salida : tiene un nuevo valor newValue
fuente
En swift 4.0
Cree un delegado en la clase que necesite enviar algunos datos o proporcionar alguna funcionalidad a otras clases
Me gusta
Después de eso en la clase que va a confirmar a este delegado
fuente