2017-05-13 1 views
0

I ont une structure (someURL) contenant 3 vars statiques:Var statique traitée comme laissée constante?

struct someUrl { 
    static var keywords = String() 
    static var someUrlStart = String() 
    static var someUrlEnd = String() 
} 

et une classe (URL) avec une variable de type someURL:

class Url { 
    var someUrlConstructor: someUrl 

    init(keywords: String, someUrlEnd: String, someUrlStart: String) { 
     self.someUrlConstructor = someUrl(someUrlStart = someUrlStart, keywords = keywords, someUrlEnd = someUrlEnd) 
    } 

} 

En essayant d'initialiser la variable dans la classe , Xcode lance une erreur indiquant que someUrlStart est une constante let.

ne peut pas attribuer à la valeur: « someUrlStart » est « let » constante

C'est tout ce que je dans mon code à ce jour, et je ne comprends pas pourquoi un var statique serait traité comme une constante. Est-ce spécifique aux initialiseurs?

Répondre

5

Vous confondez le compilateur ici. Tout d'abord votre syntaxe est mauvaise en termes de la façon dont vous passer des paramètres, il devrait être : au lieu de =, vous devez retirer le static et changer l'ordre des paramètres:

struct someUrl { 
    var keywords = String() 
    var someUrlStart = String() 
    var someUrlEnd = String() 
} 

class Url { 
    var someUrlConstructor: someUrl 

    init(keywords: String, someUrlEnd: String, someUrlStart: String) { 
     self.someUrlConstructor = someUrl(keywords: keywords, someUrlStart: someUrlStart, someUrlEnd: someUrlEnd) 
    } 
} 

Alternativement, si vous voulez les garder statiques supprimer les paramètres complètement depuis maintenant ils sont des variables statiques et non des variables membres/exemple:

struct someUrl { 
    static var keywords = String() 
    static var someUrlStart = String() 
    static var someUrlEnd = String() 
} 

class Url { 
    var someUrlConstructor: someUrl 

    init(keywords: String, someUrlEnd: String, someUrlStart: String) { 
     self.someUrlConstructor = someUrl() 
    } 
} 

ce que le compilateur pensé que vous étiez en train de faire (ou en fait ce que vous étiez en fait faire écrire =) a essayé de changer le someUrlEnd (et les deux autres) vous ont été donnés comme un paramètre d'initialisation qui est en fait une constante.


Outre la mauvaise syntaxe je ne vois pas une utilisation pour le static ou pour le class Url, il suffit de prendre le struct someUrl, initialiseur par défaut et aller de là. Note générale: veuillez mettre en majuscule la première lettre de la structure: SomeUrl.

+0

Merci beaucoup. J'avais commandé les paramètres comme je l'ai fait à cause de l'erreur. Je voulais voir si cela enverrait toujours une erreur sur le premier paramètre ou si elle était spécifique à someUrlStart. En outre, j'avais l'intention de les garder comme des vars statiques. Merci beaucoup de me rappeler de supprimer les paramètres – froggomad

1

static Les variables appartiennent au struct lui-même, pas l'instance. Vous ne pouvez donc pas les atteindre via l'instance, en utilisant la notation par points.

Je ne sais pas ce que vous voulez faire, mais cela fonctionnerait sur le plan technique:

struct SomeUrl { 
    static var keywords = String() 
    static var someUrlStart = String() 
    static var someUrlEnd = String() 
} 

class Url { 
    let someUrlConstructor = SomeUrl() 

    init(keywords: String, someUrlEnd: String, someUrlStart: String) { 
     SomeUrl.keywords = keywords 
     SomeUrl.someUrlStart = someUrlStart 
     SomeUrl.someUrlEnd = someUrlEnd 
    } 
}