2016-06-21 11 views
2

Der folgende Codeblock ist auch ohne Angabe der Methode init in Ordnung. Wenn dies der Fall ist, welcher Zweck dient die init Methode?Warum müssen wir die init-Methode angeben?

struct Person { 
    var name: String 
    var age: Int 

    init(name: String, age: Int){ 
     self.name = name 
     self.age = age 
    } 

} 

let somePerson = Person(name: "Sam", age: 21) 
somePerson.name 
somePerson.age 

Vielen Dank Ihr Feedback.

Antwort

1

Es ist das Verhalten von Struct in swift.

See (element Initializers für Strukturtypen) in https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html

„Strukturtypen erhalten automatisch ein element initializer wenn sie nicht alle ihre eigenen initializers definieren. Im Gegensatz zu einer Standardinitialisierung, die Struktur erhält ein Memberwise-Initialisierer , selbst wenn es Eigenschaften gespeichert hat, die keine Standardwerte haben. "

Wenn Sie keine memberwise Init-Methode angeben, erstellt es für Sie. Die Init, die Sie deklarieren, ermöglicht Ihnen mehr als nur eine einfache Initialisierung. Zum Beispiel:

struct Person { 
    var name: String 
    var age: Int 

    init(name: String, age: Int){ 
     self.name = name.uppercaseString() 
     self.age = age + 22 
     //and more works ... 
    } 

} 
1

Wie in diesem Dokument

Swift initializers

für jede Struktur oder Klasse

Swift stellt eine Standard initializer darauf hingewiesen, dass Standardwerte für alle seine Eigenschaften bereitstellt und nicht Stellen Sie mindestens einen Initialisierer zur Verfügung. Der Standardinitialisierer erstellt eine neue Instanz, bei der alle Eigenschaften auf die Standardwerte gesetzt sind.

Strukturtypen erhalten automatisch einen Memberwise-Initialisierer, wenn sie keine eigenen benutzerdefinierten Initialisierer definieren . Im Gegensatz zu einem Standardinitialisierer empfängt die Struktur einen Memberwise-Initialisierer, auch wenn Eigenschaften gespeichert hat, die keine Standardwerte haben.

Wenn Sie also eine Init-Methode schreiben, MÜSSEN Sie den Standard-Initialisierer selbst schreiben, wenn Sie ihn haben wollen.

Wenn Sie nur den Standardinitialisierer benötigen, können Sie ihn weglassen.

+0

... * das bietet Standardwerte * ist eigentlich nicht der Fall in der Frage. – vadian

+0

Ja, ich habe den relevanten Abschnitt erweitert ... –

0

Sie brauchen es nicht mehr (mehr). Die Memberwise-Initialisierung ist eine neue Funktion von Swift 2.2. Der Autor schrieb diesen Code entweder für eine frühere Version von Swift oder wusste nicht, dass das nicht mehr nötig ist.

Verwandte Themen