Die initWithSomething
ist ein Objective-C-Stil, und es wird nicht genau funktionieren wie das in Swift.
In Swift heißen alle Initialisierer init
und können optional einige Parameter übernehmen.
Sie Standardwerte wie diese verwenden:
class Example {
var aVar: String
init(goodVar : String = "Good Var!") {
aVar = goodVar
}
}
let example1 = Example()
println(example1.aVar) // prints "Good Var!"
Doch dieser Ansatz wird nicht genau wie in Ihrem Beispiel arbeiten, denn wenn man die zweite init
Methode einführen, dann ist es nicht eindeutig, was man wollte:
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…
Ein besserer Ansatz könnte sein, Swift enum
zu verwenden:
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"
Dieser Ansatz bietet die gewünschte Flexibilität mit der normalen Swift-Syntax.
Vielleicht werfen Sie einen Blick auf "Komfort init" hier: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/ TP40014097-CH18-ID215 – grominet