Je configure des ViewControllers par programmation (pas de storyboard).
Je souhaite transmettre des données au prochain VC, et bien que je sache comment le faire avec une suite et un storyboard, je ne sais pas comment faites-le purement par programmation.
J'obtiens l'erreur "Le membre d'instance ne peut pas être utilisé sur le type ..."
// Create Next View Controller Variable let nextViewController = CarbonCalculatorResultsViewController() // Pass data to next view controller. There is already a variable in that file: var userInformation: UserInformation? CarbonCalculatorResultsViewController.userInformation = userInformation // Push next View Controller self.navigationController?.pushViewController(nextViewController, animated: true)
Dois-je instancier le suivant VC avant que je puisse transmettre des données? C'est ce dont cette réponse semble parler et pourtant je n'ai pas de storyboard. Merci!
3 Réponses :
Vous devez passer la variable sur l ' Object
, pas sur la Class
Remplacez: CarbonCalculatorResultsViewController.userInformation = userInformation
p >
Avec:
nextViewController.userInformation = userInformation
Remarque:
CarbonCalculatorResultsViewController
est la Classe < /code>.
nextViewController
est l 'Object
.
Votre code complet devrait ressembler à ceci:
< pré> XXX L'exemple de code actuel (ci-dessus) définit une valeur sur une variable statique (appartenant à CarbonCalculatorResultsViewController.Type
.
Ce que je pense que vous voulez implémenter est le suivant à la place: p>
// Create Next View Controller Variable let nextViewController = CarbonCalculatorResultsViewController() // Pass data to next view controller. There is already a variable in that file: var userInformation: UserInformation? nextViewController.userInformation = userInformation // Push next View Controller self.navigationController?.pushViewController(nextViewController, animated: true)
Cet exemple de code définit une valeur pour la variable d'instance userInformation
sur le type nextViewController
.
p>
Étape 1: Configurez votre classe de destination
Dans la classe CarbonCalculatorResultsViewController
, déclarez une var
pour recevoir des données comme ceci: p >
let nextViewController = CarbonCalculatorResultsViewController() // You have access of the variable in CarbonCalculatorResultsViewController nextViewController.foo = <data_you_want_to_pass> // Push next View Controller self.navigationController?.pushViewController(nextViewController, animated: true)
Étape 2: Préparez les données dans votre classe source
class CarbonCalculatorResultsViewController: UIViewController { var foo: String? { didSet { // What you'd like to do with the data received print(foo ?? "") } } ovevride func viewDidLoad() { // } }
Ensuite, chaque fois que le CarbonCalculatorResultsViewController
prend vie, le didSet {}
de foo
serait appelé.