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)