Il initWithSomething
è uno stile di Objective-C, e non funzionerà esattamente come quello in Swift.
In Swift, tutti gli inizializzatori sono chiamati init
e possono facoltativamente richiedere alcuni parametri.
È possibile utilizzare i valori di default in questo modo:
class Example {
var aVar: String
init(goodVar : String = "Good Var!") {
aVar = goodVar
}
}
let example1 = Example()
println(example1.aVar) // prints "Good Var!"
Tuttavia, questo approccio non funzionerà esattamente come nel tuo esempio, perché una volta che si introduce il secondo metodo init
, è ambigua, che si voleva:
class Example {
var aVar: String
init(goodVar : String = "Good Var!") {
aVar = goodVar
}
init(fooBar : String = "Foo Bar") {
aVar = fooBar
}
}
let example1 = Example() // error: cannot invoke initializer…
Un approccio migliore potrebbe essere quella di utilizzare Swift della enum
:
class Example {
enum ExampleType : String {
case GoodVar = "Good Var!"
case FooBar = "Foo Bar"
}
var aVar: String
init(type : ExampleType) {
aVar = type.rawValue
}
}
let example1 = Example(type: .GoodVar)
println(example1.aVar) // "Good Var!"
let example2 = Example(type: .FooBar)
println(example2.aVar) // "Foo Bar"
Questo approccio fornirà la flessibilità che desideri utilizzando la normale sintassi Swift.
fonte
2015-05-30 20:13:07
Forse dare un'occhiata a "convenience init" qui: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/ TP40014097-CH18-ID215 – grominet