linea kits instalar for developers developer descargar ios swift3

ios - kits - No se puede usar el miembro de la instancia dentro del inicializador de propiedades



xcode for ipad (1)

UIView una UIView personalizada y encontré un problema extraño. Creo que esto está relacionado con un concepto muy fundamental, pero simplemente no lo entiendo, suspiro ...

class ArrowView: UIView { override func draw(_ rect: CGRect) { let arrowPath = UIBezierPath.bezierPathWithArrowFromPoint(startPoint: CGPoint(x:bounds.size.width/2,y:bounds.size.height/3), endPoint: CGPoint(x:bounds.size.width/2, y:bounds.size.height/3*2), tailWidth: 8, headWidth: 24, headLength: 18) let fillColor = UIColor(red: 0.00, green: 0.59, blue: 1.0, alpha: 1.0) fillColor.setFill() arrowPath.fill() } }

Este código funciona bien, pero si agarré esta línea de la función de anulación, no se compila. El error dice que no puedo usar la propiedad de los límites.

let arrowPath = UIBezierPath.bezierPathWithArrowFromPoint(startPoint: CGPoint(x:bounds.size.width/2,y:bounds.size.height/3), endPoint: CGPoint(x:bounds.size.width/2, y:bounds.size.height/3*2), tailWidth: 8, headWidth: 24, headLength: 18)

No se pueden usar los ''límites'' de los miembros de la instancia dentro del inicializador de propiedades; los inicializadores de propiedad se ejecutan antes de que ''self'' esté disponible

No entiendo por qué no puedo usar estos límites del sorteo


Entonces, si decodificamos el mensaje de error, podemos descubrir qué está mal. Dice que property initializers run before self is available por lo que debemos ajustar lo que estamos haciendo, ya que nuestra propiedad depende de los límites que le pertenecen. Vamos a probar una variable perezosa. No puede usar límites en un let porque no existe cuando se crea esa propiedad porque pertenece a self. Entonces, en init self aún no está completo. Pero si usa una varilla floja, entonces el auto y sus límites estarán listos cuando lo necesite.

lazy var arrowPath = UIBezierPath.bezierPathWithArrowFromPoint(startPoint: CGPoint(x: self.bounds.size.width/2,y: self.bounds.size.height/3), endPoint: CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/3*2), tailWidth: 8, headWidth: 24, headLength: 18)