2017-04-10 2 views
0

Si je décommente self.numberLabel.textColor = UIColor.black, la compilation compile mais se bloque dans le simulateur.instanciation paresseuse de `textColor` dans` UILabel` renvoie une erreur

lazy public var numberLabel: UILabel = { 
     self.numberLabel.textColor = UIColor.black 
     return UILabel(frame: CGRect.init(x: 10, y: 40, width: self.bounds.size.width, height: 20)) 
    }() 

Les états d'erreur: "EXC_BAD_ACCESS".

+3

Comment pouvez-vous définir la couleur du texte sur quelque chose qui n'a pas encore été créé? – rmaddy

Répondre

1

Une propriété stockée paresseux est une propriété dont la valeur initiale est calculée pas jusqu'à ce que la première fois qu'il est utilisé. Vous indiquez une propriété stockée paresseuse en écrivant le modificateur paresseux avant sa déclaration.

extrait de l'échantillon - 3.x Swift

lazy public var numberLabel: UILabel = { 
    let label = UILabel(frame: CGRect(x: 20, y: 20, width: 200, height: 21)) 
    label.textColor = UIColor.black 
    return label 
}() 



override func viewDidLoad() { 
     super.viewDidLoad() 
     view.addSubview(numberLabel) 
     numberLabel.text = "Good" 
} 
1

Vous parlez de numberLabel avant de l'installer, la meilleure approche serait:

lazy public var numberLabel: UILabel = { 
    let label = UILabel(frame: CGRect.init(x: 10, y: 40, width:  self.bounds.size.width, height: 20)) 
    label.textColor = UIColor.black 
    return label 
}() 

Comme vous pouvez le voir le premier " let label = "crée le label, alors toutes les initialisations peuvent être effectuées (comme la textcolor), enfin nous retournons le label, à assigner à la propriété paresseuse.