Erreur de valeurs de paramètre par défaut: "membre d'instance ne peut pas être utilisé sur le type viewcontroller"

À mon avis, le controller:

class FoodAddViewController: UIViewController, UIPickerViewDataSource, UITextFieldDelegate, UIPickerViewDelegate { let TAG = "FoodAddViewController" // Retreive the managedObjectContext from AppDelegate let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext @IBOutlet weak var foodName: UITextField! @IBOutlet weak var foodPortion: UITextField! @IBOutlet weak var foodCalories: UITextField! @IBOutlet weak var foodUnit: UILabel! @IBOutlet weak var unitPicker: UIPickerView! @IBOutlet weak var unitPickerViewContainer: UIVisualEffectView! /* unrelated code has been ommited */ func validateAllTextFields(textFields: [UITextField] = [foodName as UITextField, foodPortion, foodCalories]) -> Bool { var result = true for textField in textFields { result = validateTextField(textField) && result } return result } func validateTextField(textField: UITextField) -> Bool{ let correctColor = UIColor.redColor().CGColor, normalColor = UIColor.blackColor().CGColor var correct = true if textField == foodPortion || textField == foodCalories{ if !Misc.isInteger(textField.text!){ correct = false } } if textField.text!.isEmpty { correct = false } textField.layer.borderColor = correct ? normalColor : correctColor return correct } } 

J'ai quelques champs de text, et dans mon validateTextField peut vérifier un à la fois, et je veux que mes validateAllTextFields puissent vérifier une list de textfield en les vérifiant un par un, si la list n'est pas donnée, je veux vérifier un donnée list par défaut qui contient les trois champs de text.

Le code que j'imagine être quelque chose comme:

 func validateAllTextFields(textFields: [UITextField] = [foodName as UITextField, foodPortion, foodCalories]) -> Bool { var result = true for textField in textFields { result = validateTextField(textField) && result } return result } 

Cependant, Xcode renvoie une erreur:

membre de l'instance ne peut pas être utilisé sur le viewcontroller de type

Quelle est la cause et comment réparer?

Vous ne pouvez pas utiliser les variables d'instance dans les déclarations de fonction. Appelez la fonction avec votre tableau textFields et transmettez les parameters.

 func validateAllTextFields(textFields: [UITextField] ) -> Bool { var result = true for textField in textFields { result = validateTextField(textField) && result } return result } 

Quelque part dans ta class:

 validateAllTextFields(textFields: [foodName, foodPortion, foodCalories]) 

Ou vous vérifiez à l'intérieur de votre fonction si textFields est vide et que vous utilisez les variables d'instance

 func validateAllTextFields(textFields: [UITextField] ) -> Bool { if textFields.count == 0 { textFields = [foodName, foodPortion, foodCalories] } var result = true for textField in textFields { result = validateTextField(textField) && result } return result }