2016-03-21 11 views
1

Ich bin neu zu schnell und stecken in einem Problem.optional lassen und optional var innerhalb einer Klasse in swift

Wenn ich optional let innerhalb einer Klasse verwende, gibt es den Fehler "Class className has no initializers".

Aber wenn ich den gleichen Code schreibe mit optional var, zeigt es keinen Fehler.

Zum Beispiel:

Der folgende Code gibt mir Fehler: Class className has no initializers

class className: UIViewController 
{ 
    let nearbyPlaceRadius : Int?  

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() 
    { 
     super.didReceiveMemoryWarning() 
    } 
} 

Der folgende Code gibt mir keinen Fehler.

class className: UIViewController 
{ 
    var nearbyPlaceRadius : Int?  

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() 
    { 
     super.didReceiveMemoryWarning() 
    } 
} 

Kann jemand bitte helfen. Danke.

Antwort

1

Das Problem ist, dass let unveränderlich ist. Sobald Sie eine Variable oder ein Objekt mit dem Schlüsselwort let definiert haben, können Sie sie nicht ändern, während Sie var verwenden, können Sie sie jederzeit ändern.

Das ist der Grund, sagen Sie es class has no initializers

let someThing: Int? //Wrong 
let someThing: Int = 100 //Correct 

Zum Vergleich: What is the difference between `let` and `var` in swift?

Update:

Sie Stichwort mit initializer lassen können.

let name: String? 

init (name: String) { 
    println("Initializing: \(name)") 
    self.name = name 
} 
+0

Aber auch wenn ich einen Wert nicht initialisiere, muss es als Null genommen werden, da es sich um eine optionale Konstante handelt. – PGDev

+0

Nein, für 'Let' Keyword wird es nicht funktionieren! Aber wenn Sie "lassen" mit "Null" erklären, was wird der Zweck davon sein? Bcaz kannst du später einen beliebigen Wert zuweisen? @PGDev –

+0

Ok ... Thanku .. :) – PGDev

4
let nearbyPlaceRadius : Int? 

Eigentlich kann man über die Linie in Ihrem Code und es ist nicht falsch hat. Aber wenn Sie dies tun, müssen Sie eine init Methode schreiben und ihren Wert innerhalb dieser Methode einstellen.

Verwandte Themen