¿Alguien podría explicar el significado de someViewController.delegate = self
y self.delegate
? ¿Dónde nos ayudan?¿Qué se entiende por .delegate = self?
Respuesta
Delegados envíanos mensajes.
Por ejemplo: si usa el delegado del acelerómetro, recibirá mensajes sobre el acelerómetro.
Si usa ese nuevo delegado de detección de neutrinos, recibirá mensajes sobre cualquier neutrino detectado en el área.
Si usa PopUps, PopUps le enviará mensajes. Y la forma en que se hace, es con el delegado de PopUp. Hay muchos, muchos ejemplos.
Por lo tanto, los delegados envían mensajes.
Es así de simple.
Puede preguntar: "¿A DÓNDE envía estos mensajes?"
La respuesta es esta: envía los mensajes a donde se establece la cosa ".delegate".
Cuando "establece el delegado", lo que hace es decir dónde quiere que vayan los mensajes.
Por lo tanto,
blah.delegate = amazingPlace enviará los mensajes a "amazingPlace".
blah.delegate = somewhereElse enviará los mensajes a "somewhereElse".
blah.delegate = auto enviará los mensajes ...... a que.
Muy a menudo, se desea que los mensajes llegan a "usted", por lo que acaba de decir "sí blah.delegate ="
Es un error muy común, de olvidar esa línea de código.
Si olvida esa línea de código, está lleno. Los mensajes van al en ninguna parte, y se quedan rascándose la cabeza tratando de descubrir qué salió mal.
Algo más que tienes que hacer: cuando utilizas un delegado, tienes que decir que quieres usar el delegado. En los viejos días con Objective-C, que acaba de hacer esto ...
@interface AppDelegate_Pad : NSObject <UIApplicationDelegate>
@interface BigTop : UIViewController <ASIHTTPRequestDelegate, UIPopoverControllerDelegate>
@interface Flying : UIViewController <UIAccelerometerDelegate>
Se puede ver que 'BigTop' quiere usar dos delegados, a saber, la ASIHTTPRequestDelegate y la UIPopoverControllerDelegate. Mientras que 'Flying' solo quiere usar un delegado, quiere usar el acelerómetro.
En Swift, no podría ser más fácil - sólo hay una coma a continuación, los protocolos:
class YourClass:UIViewController, SomeDelegate, AnotherDelegate
que realmente no puede hacer mucho en el iPhone sin necesidad de utilizar delegados por todo el lugar.
Los delegados se utilizan en todas partes y siempre en iOS.
Es perfectamente normal que una clase use una docena de delegados.
En el ejemplo de "vuelo" arriba, en alguna parte del código para "vuelo" Habría que decir [[UIAccelerometer sharedAccelerometer] setDelegate:self];
En el caso de BigTop, tendría que configurar el delegado en algún lugar de las ASIHttpRequests,
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:gid forKey:@"gid"];
[request setPostValue:nom forKey:@"nom"];
[request setDelegate:self];
(no se olvide de los viejos tiempos con Objective-C, x.delegate=self
era exactamente el mismo que [x setDelegate:self]
.)
Hoy en día con Sw IFT sólo hay que escribir
x.delegate = self
y eso es todo lo que hay que hacer.
Así que eso es lo que estás haciendo. Los delegados envían mensajes. Tiene que decir donde desea que los mensajes vayan. Muy típicamente, usted quiere que vayan a "usted", entonces en ese caso simplemente diga x.delegate=self
.
Espero que ayude.
Si en cualquier caso la respuesta de Bourne no ayuda ... un delegado es básicamente la reacción de un evento en un objeto y decir ".delegate = self" significa que esos protocolos se han adoptado en sí mismo ... por ejemplo. lo que sucede cuando se selecciona una fila en la tabla se lo dice el método de delegado de tabla vista "didSelectRowAtIndexPath" ... y si un viewcontroller tiene una tabla vista ... y "didSelectRowAtIndexPath" se define en ese viewcontroller solo diremos ... tableview .delegate = self "... y" self.anything "se usa para decir que" anything "es una propiedad de sí mismo ... por ejemplo NSString * cualquier cosa; @property (no atómico, retener) NSString * anything ;
luego "self.anything"
Delegate
se utiliza para pasar/comunicar datos/mensaje b/w dos objetos de clases. Aquí, tableView
(Remitente) envía datos/mensaje al viewController
(Receptor). Considere el ejemplo de implementar UITableView
en la costumbre viewController
Aquí, UITableViewDataSource
& UITableViewDelegate
son en realidad protocolos. Lamentablemente, UIKit Framework
no es de código abierto. Pero aseguraré esto lo que sucede internamente después de referirme a muchos artículos.
El protocolo es como entrenador de baloncesto con algunos requisitos. Él/ella le dice a los jugadores como class, struct, enum what to do?
usando esos requisitos. Pero él/ella doesn't knows
how to do?
por el mismo. Por lo tanto, la clase o estructura que conforma ese protocolo debe proporcionar la implementación de esos requisitos al tiempo que logra tirar la pelota.
protocol UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
}
Se dice que un protocolo es un protocolo DataSource y, a continuación, siempre contiene las funciones necesarias con "tipo de retorno" como se muestra a continuación.
protocol UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
}
Ejecución UITableView el interior a medida viewController
class viewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let tableView = UITableView()
override func viewDidLoad {
tableView.delegate = self
tableView.dataSource = self
}
Aquí, tableView
actúa como Delegador (remitente) & viewController object i.e (self)
como Delegado (receptor). Para obtener UITableView
en viewController
, debe cumplir con ambos protocolos.
Por lo tanto, el objeto de clase viewController
ha implementado todas las funciones requeridas de ambos protocolos. Ahora, self
se puede utilizar como tipo UITableViewDelegate
o tipo UITableViewDataSource
porque el protocolo se puede utilizar como tipo para un objeto de clase que se ajuste a él. Ahora, ambas propiedades de tableView
es decir delegate
& dataSource
se asignan a self
porque tiene los mismos tipos de protocolos respectivos.
Las funciones no opcionales de ambos protocolos se implementan en viewController
objeto de clase de la siguiente
Protocolo UITableViewDelegate
funciones
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// Do further processes like pushing or poping another viewController
}
Protocolo UITableViewDataSource
funciones
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "Cell")
}
1) Cuando el usuario seleccione una fila en una sección luego tableview
(Sender) es decir UItableView()
llamadas th e UITableViewDelegate
func a continuación se muestra al pasar datos a los parámetros tableView
& indexPath
que reside en el objeto viewController
(Receptor) a través de su propiedad delegate
. Ahora, viewController
utiliza los datos pasados para realizar más procesos, como empujar o abrir el nuevo control de vista personalizado.
tableView.delegate?.tableView(UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
2) Funciones dentro UITableViewDatasource
protocolo proporciona datos personalizados a tableview
(Sender). El tableview
pregunta al objeto viewController
llamando a las funciones de Datasource con datos de paso a los parámetros tableView
& indexPath
que se encuentra en el objeto viewController
(Receptor) a través de su propiedad datasource
. Ahora viewController
utiliza los datos pasados & devuelve datos personalizados tableview
. Ahora tableview
utiliza esos datos para crear células "10" en una especie de "célula" sección & en indexpath
tableView.dataSource?.tableView(UITableView, numberOfRowsInSection section: Int) -> returns "10"
tableView.dataSource?.tableView(UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> returns "cell"
Por último, toda UIKit Framework
utiliza delegar & patrones de diseño de la fuente de datos en todas sus clases, tales como UIApplication
, UITableView
, UICollectionView
, UITextField
& para comunicar datos. Lamentablemente, UIKit Framework
no es de código abierto.
Hola, soy un novato en stackOverflow. Mirando a mi alrededor para responder a alguna Q conocida con mi conocimiento! –
La respuesta es correcta. ¡No lo votes! Solo porque ya fue respondido hace 8 años. –
La votación a la baja es más que solo si la respuesta es incorrecta. Si pasa el cursor sobre el botón de votación hacia abajo, verá una información sobre herramientas. Sugiero responder preguntas que son más recientes y que ya no tienen respuestas. Puede usar etiquetas favoritas y filtrará la lista de preguntas para que sea más relevante para usted. De esa forma puedes encontrar preguntas más nuevas para responder. – Fogmeister
- 1. ¿Qué se entiende por WS- *?
- 2. ¿Qué se entiende por inmutable?
- 3. ¿Qué se entiende por el término "Instrumentación"?
- 4. ¿Qué se entiende por metadatos en Android?
- 5. ¿Qué se entiende por deshabilitar las interrupciones?
- 6. ¿Qué se entiende por tipo parametrizado?
- 7. ¿Qué se entiende por modo de enlace en WebSphere MQ?
- 8. ¿Qué se entiende por conexión. Deshacer() en C#?
- 9. ¿Qué se entiende por el término "pila web"?
- 10. ¿Qué se entiende por tipos dependientes de ruta de Scala?
- 11. ¿Qué se entiende por el término "objeto sucio"?
- 12. ¿Qué se entiende por autenticación de dos patas?
- 13. ¿Qué se entiende por 'objeto de primera clase'?
- 14. ¿Qué se entiende por CoreData no es seguro para subprocesos?
- 15. ¿Qué se entiende por clases en sí mismas son objetos?
- 16. ¿Qué se entiende por "sustituciones que evitan la captura"?
- 17. ¿Por qué "[self class] == [super class]"?
- 18. ¿Qué es Delegate en iPhone?
- 19. ¿Qué significa .delegate en groovy?
- 20. Lo que se entiende por 'MyType = Int => Boole'
- 21. ¿Cómo se selecciona child-or-self (niños + self)
- 22. ¿Qué significa "Self" y "# Self" en el instrumento Time Profiler?
- 23. UIImagePickerController delegate warning
- 24. ¿Qué significa "self" en javascript?
- 25. ¿Qué significa [self self] en el objetivo c?
- 26. ¿Qué se entiende por marco, lenguaje de programación y lenguaje de scripting?
- 27. ¿Qué se entiende por "falla" en la protección contra fallas rápidas de IIS?
- 28. ¿Qué se entiende por tamaño de archivo y tamaño de datos en MongoDB?
- 29. ¿Qué se entiende por 'modificación de consultas' como un enfoque para implementar vistas?
- 30. ¿Qué se entiende por pruebas A/B de un sitio web?
Dicho sea de paso, NO ES REALMENTE un delegado de detección de neutrinos. Tienes que escribir el tuyo – Fattie
gracias ... estaba realmente confundido por eso. –
mejor explicación que he visto hasta ahora – SeanNieuwoudt