2017-08-07 1 views
0
class person { 
    var name : String 

    init(name: String) { 
     self.name = name 
    } 
} 

benötigt werden, ich lerne Swift Klasse Kapitelself.name = Name in Swift. Ich verstehe nicht, warum diese Codes

Ich verstehe nicht, warum init(name:String) self.name = name Code benötigt wird , was der Zweck dieses Codes ist.

Ich erklärte var name: String und wieder init(name: String), warum wird self.name = name benötigt?

was unterscheidet nur zwischen var name und self.name = name?

+0

'var lesen: String' Ihr Eigentum erklärt. Der Initialisierer 'init' wird aufgerufen, wenn Sie eine Instanz der Klasse erstellen. Die Zeichenfolge, die in Person (Name: "Jihoon") übergeben wurde, wird der Eigenschaft zugewiesen. In der Anweisung 'self.name = name' bezieht sich' self.name' auf die Eigenschaft und 'name' ist die übergebene Zeichenkette -" jihoon "in meinem Beispiel. – vacawama

Antwort

0

Classes und structures müssen alle ihre gespeicherten Eigenschaften auf einen entsprechenden Anfangswert setzen, wenn eine Instanz dieser Klasse oder Struktur erstellt wird. Gespeicherte Eigenschaften können nicht in einem unbestimmten Zustand belassen werden.

class person { 
    var name : String // undetrmined state 
    init(name: String) { 
     self.name = name 
    } 
} 
class person2 { 
    var name : String = "default value" // detrmined state 
    // Now these intializer are not optional. You can use these initializer or not. 
    init(name: String) { 
     self.name = name 
    } 
    init() { 
    } 
} 
// Aother example for optional stored property 
class person3 { 
    var name : String? // detrmined state, because default value for optional is nil 
    // Now these intializer are not optional. You can use these initializer or not. 
    init(name: String) { 
     self.name = name 
    } 
    init() { 
    } 
} 

Für mehr Informationen zu diesem Namen ein Apple Doc

+0

Hi Jihoon, hast du meine Antwort überprüft? – iMuzahid

+0

Vielen Dank für Ihre Hilfe! ja ich habe überprüft :) – jihoon

+0

Danke für Ihre Aufmerksamkeit. Upvote bitte :) – iMuzahid

3

Schauen Sie in etwas namens Variable Scope. In Ihrem Code - es gibt zwei "Name Variablen - eine Klasse (oder Instanz) Variable und einen" Parameter in Ihrem init.

Letzteres - init(name:) ist nur in Verwendung innerhalb Ihre Initialisierungsfunktion, also die Instanz hat keine Namen ohne self.name = name, wenn Sie die Instanz erstellt haben.

Das erste ist verfügbar - für die Instanz - solange Ihre Instanz der Klasse ist.

Um dies weiter zu erläutern, versuchen Sie es. Ändern Sie den Code zu sein:

class Person { 
    var myName : String 
    var myOtherName : String 

    init(name: String) { 
     self.myName = name 
    } 
} 

In Ihrer App oder View-Controller, dies tun:

let myPerson = Person(name: "john") 
print(myPerson.myName)  // prints "jihoon" 
print(myPerson.myOtherName) // prints nothing 
print(myPerson.name)   // generates a build error because name doesn't exist 

Eine letzte Anmerkung - in Swift Klassennamen werden aktiviert, so dass der beste Name ist Person, nicht person .

+0

Vielen Dank für Ihre Hilfe! – jihoon

Verwandte Themen