en el objetivo-C:
@interface CustomDataSource : NSObject <UITableViewDataSource>
@end
en Swift:
class CustomDataSource : UITableViewDataSource {
}
Sin embargo, aparecerá un mensaje de error:
- El tipo 'CellDatasDataSource' no se ajusta al protocolo 'NSObjectProtocol'
- El tipo 'CellDatasDataSource' no se ajusta al protocolo 'UITableViewDataSource'
¿Cuál debería ser la forma correcta?
objective-c
swift
YuXuan Fu
fuente
fuente
Respuestas:
Tienes que hacer que tu clase herede de
NSObject
conformidad conNSObjectProtocol
. Las clases de Vanilla Swift no. Pero muchas partes deUIKit
esperarNSObject
s.Pero esto:
Se espera. Recibirá el error hasta que su clase implemente todos los métodos requeridos del protocolo.
Así que consigue la codificación :)
fuente
Una clase tiene que heredar de una clase padre antes de cumplir con el protocolo. Hay principalmente dos formas de hacerlo.
Una forma es hacer que su clase herede
NSObject
y se ajuste a la claseUITableViewDataSource
. Ahora, si desea modificar las funciones en el protocolo, debe agregar una palabra claveoverride
antes de la llamada a la función, de esta maneraSin embargo, esto a veces ensucia su código porque puede tener muchos protocolos que cumplir y cada protocolo puede tener varias funciones de delegado. En esta situación, puede separar el código conforme del protocolo de la clase principal mediante el uso
extension
, y no necesita agregar unaoverride
palabra clave en la extensión. Entonces el equivalente del código anterior seráfuente
Xcode 9, ayuda a implementar todos los métodos obligatorios de Swift Datasource & Delegates.
Aquí hay un ejemplo de
UITableViewDataSource
:Muestra advertencia / sugerencia para implementar métodos obligatorios:
Haga clic en el botón 'Reparar', agregará todos los métodos obligatorios en el código:
fuente