2017-10-21 91 views
-3

Je voudrais avoir un tableau en tant que membre de mon contrôleur de vue de table. Le tableau sera une source de données. Quelles sont les différences ou les avantages/désavantages des manières suivantes d'avoir une matrice de variables membres?Différence entre ces tableaux en tant que membre variable contrôleur de vue

class BinViewController: UITableViewController, WKNavigationDelegate { 
    var peopleArray1 = [String]() 
    var peopleArray2: [String] = [] 
    var peopleArray3: [String]! 
    var peopleArray4: [String]? 
+4

Ceci est une question fondamentale sur les déclarations et les initialisations Swift et de propriété. Avez-vous lu le livre Swift? Quelles questions spécifiques avez-vous sur ces quatre lignes de code? Qu'est-ce que vous ne comprenez pas exactement à propos de leurs différences? S'il vous plaît [modifier] votre question (ne postez pas de commentaires) avec vos clarifications. – rmaddy

Répondre

1

Ces deux font essentiellement la même chose:

var peopleArray1 = [String]() 
var peopleArray2: [String] = [] 

Ils déclarent et initialiser un tableau vide de type [String].


Ces deux dans d'autre part, sont également similaires:

var peopleArray3: [String]! 
var peopleArray4: [String]? 

Le tableau lui-même pour les deux d'entre eux pourrait être nil, dont ils sont actuellement ils sont déclarés. La différence est que peopleArray3 est un tableau optionnel implicitement déroulé de chaînes, tandis que peopleArray4 est un tableau facultatif de chaînes. Ce que cela signifie pour peopleArray3 signifie que vous dites à l'utilisateur que vous lui définissez une valeur avant de l'utiliser. Si vous essayez d'y accéder alors que sa valeur est nil, l'application va planter.

Pour peopleArray4, vous indiquez au compilateur que le tableau pourrait être nil à tout moment, vous aurez donc besoin de vérifier si peopleArray4 n'est pas nil avant d'y accéder.

1

Je pense qu'il n'y a pas la bonne question que vous devez vous poser. Il n'y a pas d'avantage ou de désavantage. Il existe des moyens d'initialiser un membre d'une classe en fonction de ce dont vous avez besoin et de la logique que vous souhaitez implémenter.

  • var peopleArray1 = [String]() vous dites au compilateur s'il vous plaît laissez-moi créer un tableau vide de chaîne. Il est déclaré et initialisé. Vous laissez également le compilateur déduire le type de votre tableau par rapport à votre deuxième instruction.

  • var peopleArray2: [String] = [] c'est 99% la même chose que votre première déclaration. Vous créez un tableau vide de String. Déclaré et initialisé. Ici, la seule différence est que vous spécifiez le type de votre tableau. Vous ne laissez pas le compilateur déduire le type de votre tableau. var variable:TypeVariable = .... Il est recommandé par Apple de laisser le compilateur de déduire le type de vos membres variables lorsque vous le pouvez parce que vous gagnez un code lisible

  • var peopleArray3: [String]! il est assez différent de vos précédentes 2 initialisations. Tout d'abord, vous devez savoir que Swift est un langage très fortement typé et vous devez initialiser chaque variable avant de l'utiliser. Une chose que vous pouvez expérimenter est d'essayer de faire la même déclaration sans le! ou ? et vous serez votre compilateur vous a prévenu d'un problème. Parfois, vous ne savez pas quelle est la valeur initiale, mais vous êtes sur que, à un moment donné, vous aurez une valeur. Une variable est ces deux états possibles: aucune valeur ou valeur n'est appelée Options.Avec cette déclaration vous dites que je veux créer un tableau de chaîne qui pourrait être nul ou pourrait avoir des valeurs de chaîne. Si vous imprimez votre tableau, vous aurez un message comme "Facultatif ([String])". Pour obtenir la valeur de votre option, vous devez le déplier avec le point d'exclamation uniquement lorsque vous êtes sûr d'avoir une valeur. Sinon, votre programme va planter. Ici, avec cette initialisation, vous dites au compilateur de ne pas s'inquiéter car vous savez qu'à l'avenir votre tableau va avoir des valeurs.

  • var peopleArray4: [String]? est la même que la précédente. La principale différence est que chaque fois que vous voulez accéder aux valeurs de PeopleArray, vous devez mettre un point d'exclamation pour déballer sa valeur. Il n'y a aucun avantage/inconvénient juste la logique d'utiliser les options. Si votre tableau peut être nul et avoir des valeurs supplémentaires ou est-ce un tableau statique ...