update instalar swift xcode6.3

swift - instalar - xcode 9 beta



Error de compilaciĆ³n al intentar anular un inicializador en Xcode 6.3 Beta 3 (3)

Un inicializador designado de una subclase debe llamar al inicializador designado de Superclass. Un inicializador de conveniencia solo puede llamar a otro inicializador de conveniencia o un inicializador designado de esa clase.

init () es un inicializador de conveniencia para UIView, si subclase UIView debe llamar a su inicializador designado que es init (frame: frame)

override init() { super.init(frame: frame) // Some init logic ... }

EDITAR: Aparentemente, en Beta 3, UIView no tiene un inicializador de conveniencia llamado como init, por lo que también debe eliminar la palabra clave de anulación, ahora este es un inicializador designado, por lo que debe llamar al inicializador designado de superclass

init() { super.init(frame: frame) // Some init logic ... }

EDITAR: Aunque esto funciona, pero creo que una mejor manera de escribir esto sería:

convenience init() { self.init(frame:CGRectZero) }

Fuente: documentación de Swift.

Regla 1 Un inicializador designado debe llamar a un inicializador designado desde su superclase inmediata.

Regla 2 Un inicializador de conveniencia debe llamar a otro inicializador de la misma clase.

Regla 3 Un inicializador de conveniencia debe finalmente llamar a un inicializador designado.

El siguiente código muestra el error de compilación en Xcode 6.3 Beta 3 . El código funciona en Xcode 6.2 y Xcode 6.3 Beta 2.

class MyView: UIView { override init() { super.init() // Some init logic ... } override init(frame: CGRect) { super.init(frame: frame) } required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } }

Mensaje de error

el inicializador no anula un inicializador designado de su superclase

Solución?

Existe una posible solución alternativa para crear un protocolo con los métodos de inicio mencionados en las notas de la versión Beta 3 . No pude hacer que funcionen tanto los init como init(frame: CGRect) .

¿Cómo puedo arreglar esos errores de compilación?


Una forma adicional de resolver es proporcionar un argumento predeterminado para el parámetro de marco de UIView

override init(frame: CGRect = CGRectZero) { super.init(frame: frame) // custom code }


swift3 trabajando: @Andrea comenta

intenta cambiar super.init() en self.init()