with stored protocol property extension constructors cannot ios swift override overriding

ios - stored - swift 4 constructor



Método de anulación con el selector ''touchesBegan: withEvent:'' tiene un tipo incompatible ''(NSSet, UIEvent)->()'' (8)

Xcode 6.3. Dentro de una clase que implementa el protocolo UITextFieldDelegate, me gustaría anular el método touchesBegan () para posiblemente ocultar el teclado. Si evito un error del compilador en la especificación de la función, entonces hay un error de compilación que intenta leer el "toque" del Set o NSSet, o bien el super.touchesBegan (touch, withEvent: event) arroja un error. ¡Una de estas combinaciones compilada en Xcode 6.2! (Entonces, ¿dónde está la documentación para Swift "Set" y cómo obtener un elemento de uno?)

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { // Hiding the Keyboard when the User Taps the Background if let touch = touches.anyObject() as? UITouch { if nameTF.isFirstResponder() && touch.view != nameTF { nameTF.resignFirstResponder(); } } super.touchesBegan(touches , withEvent:event) }

Tratar:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) or override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent)

Error del compilador: método de anulación con el selector ''touchesBegan: withEvent:'' tiene un tipo incompatible ''(NSSet, UIEvent) -> ()'' y

super.touchesBegan(touches , withEvent:event)

también se queja

''NSSet'' no es implícitamente convertible a ''Set''; ¿Querías usar ''as'' para convertir explícitamente?

Tratar:

override func touchesBegan(touches: Set<AnyObject>, withEvent event: UIEvent)

Error del compilador: el tipo ''AnyObject'' no se ajusta al protocolo ''Hashable''

Tratar:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)

Error del compilador en

if let touch = touches.anyObject() as? UITouch

''Set'' no tiene un miembro llamado ''anyObject'' PERO la especificación de la función y la llamada a super () están bien.

Tratar:

override func touchesBegan(touches: NSSet<AnyObject>, withEvent event: UIEvent) -> () or override func touchesBegan(touches: NSSet<NSObject>, withEvent event: UIEvent)

Error del compilador: no se puede especializar el tipo no genérico ''NSSet''


Ahora está en la referencia de la API de Apple here y para anular en xCode versión 6.3 y swift 1.2 puede usar este código:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { if let touch = touches.first as? UITouch { // ... } // ... }


Con xCode 7 y swift 2.0, use el siguiente código:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first{ print("/(touch)") } super.touchesBegan(touches, withEvent: event) } override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first{ print("/(touch)") } super.touchesEnded(touches, withEvent: event) } override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first{ print("/(touch)") } super.touchesMoved(touches, withEvent: event) }


La actual en este momento para la actualización más reciente a partir de xCode 7.2 Swift 2.1 el 19 de diciembre de 2015.

La próxima vez que reciba un error como este nuevamente, elimine la función y comience a escribirla nuevamente "touchesBe ..." y xCode debería completarla automáticamente en la más nueva para usted en lugar de intentar reparar la anterior.

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { for touch: AnyObject! in touches { let touchLocation = touch.locationInNode(self) //Use touchLocation for example: button.containsPoint(touchLocation) meaning the user has pressed the button. } }


Lo que funcionó para mí fue:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { if let touch = touches.first as? UITouch { // ... } super.touchesBegan(touches , withEvent:event!) }


Pequeña adición. Para una compilación rápida sin error, debe agregar

importar UIKit.UIGestureRecognizerSubclass


Usando Swift 3 y Xcode 8

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { } override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { } override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { } override func touchesCancelled(_ touches: Set<UITouch>?, with event: UIEvent?) { // Don''t forget to add "?" after Set<UITouch> }


Usando Swift 4 y Xcode 9

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { }


Swift 1.2 (Xcode 6.3) introdujo un tipo de Set nativo que se NSSet con NSSet . Esto se menciona en el blog Swift y en las notas de lanzamiento de Xcode 6.3 , pero aparentemente aún no se ha agregado a la documentación oficial (actualización: como señaló Ahmad Ghadiri , ahora está documentado).

El método UIResponder ahora se declara como

func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)

y puedes anularlo así:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { if let touch = touches.first as? UITouch { // ... } super.touchesBegan(touches , withEvent:event) }

Actualización para Swift 2 (Xcode 7): (Comparar error de función de anulación en Swift 2 )

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { if let touch = touches.first { // ... } super.touchesBegan(touches, withEvent:event) }

Actualización para Swift 3:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { if let touch = touches.first { // ... } super.touchesBegan(touches, with: event) }