Swift Language Convenienza init


Esempio

Le classi Swift supportano diversi modi di essere inizializzati. Seguendo le specifiche di Apple, queste 3 regole devono essere rispettate:

  1. Un inizializzatore designato deve chiamare un inizializzatore designato dalla sua superclasse immediata. Per la prima regola
  2. Un inizializzatore conveniente deve chiamare un altro inizializzatore dalla stessa classe.
  3. Un inizializzatore conveniente deve infine chiamare un inizializzatore designato. Per la seconda e terza regola
class Foo {

    var someString: String
    var someValue: Int
    var someBool: Bool

    // Designated Initializer
    init(someString: String, someValue: Int, someBool: Bool)
    {
        self.someString = someString
        self.someValue = someValue
        self.someBool = someBool
    }

    // A convenience initializer must call another initializer from the same class.
    convenience init()
    {
        self.init(otherString: "")
    }
    
    // A convenience initializer must ultimately call a designated initializer.
convenience init(otherString: String)
    {
        self.init(someString: otherString, someValue:  0, someBool: false)
    }
}


class Baz: Foo
{
    var someFloat: Float
    
    // Designed initializer
    init(someFloat: Float)
    {
        self.someFloat = someFloat
        
        // A designated initializer must call a designated initializer from its immediate superclass.
        super.init(someString: "", someValue: 0, someBool: false)
    }
    
    // A convenience initializer must call another initializer from the same class.
    convenience init()
    {
        self.init(someFloat: 0)
    }
}

Inizializzatore designato

let c = Foo(someString: "Some string", someValue: 10, someBool: true)

Convenienza init ()

let a = Foo()

Convenience init (otherString: String)

let b = Foo(otherString: "Some string")

Inizializzatore designato (chiamerà la superclasse Designated Initializer)

let d = Baz(someFloat: 3)

Convenienza init ()

let e = Baz()

Fonte immagine: The Swift Programming Languag e