swift swift2

Error de función de reemplazo en Swift 2



swift2 (2)

Este código en XCode 6 no tiene error pero en XCode 7 (Swift 2) se produjo este error:

El método no anula ningún método de su superclase.

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { /* Called when a touch begins */ }

Cuando se elimina la palabra de override se produjo este error:

El método ''touchesBegan ( : withEvent :)'' con el selector Objective-C ''touchesBegan: withEvent:'' entra en conflicto con el método ''touchesBegan ( : withEvent :)'' de la superclase ''UIResponder'' con el mismo selector Objective-C


Está recibiendo su primer error porque gran parte de Cocoa Touch ha sido auditada para admitir los genéricos de Objective-C, lo que significa que ahora se pueden escribir elementos de elementos como matrices y conjuntos. Como resultado de esto, la firma de este método ha cambiado y dado que lo que has escrito ya no coincide con esto, recibes un error que explica que has marcado un método como override pero en realidad no coincide con ningún método. de la super clase.

Luego, cuando elimina la palabra clave de override , el error que está recibiendo es hacerle saber que ha creado un método que tiene un selector Objective-C conflictivo con el método real de toques iniciados (a diferencia de Swift, Objective-C no es compatible método de sobrecarga).

La conclusión es que, en Swift 2, los cambios en los toques comenzaron a tener este aspecto.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { // stuff }

Para obtener más información sobre qué significan los genéricos de Objective-C para su código Swift, le sugiero que eche un vistazo a la sección Lightweight Generics en la versión preliminar de Uso de Swift con Cocoa y Objective-C . A partir de ahora en las páginas 33 y 34.


Simplemente elimine la anulación funcionará.

func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { /* Called when a touch begins */ }