initWithSomething
jest styl Objective-C, a to nie będzie działać dokładnie tak jak to w Swift.
W Swift wszystkie inicjalizatory są nazywane init
i mogą opcjonalnie przyjmować niektóre parametry.
Można użyć wartości domyślnych tak:
class Example {
var aVar: String
init(goodVar : String = "Good Var!") {
aVar = goodVar
}
}
let example1 = Example()
println(example1.aVar) // prints "Good Var!"
Jednak takie podejście nie będzie działać dokładnie tak, jak w przykładzie, ponieważ po wprowadzić drugą metodę init
, jest niejednoznaczna, który chciałeś:
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…
lepszym rozwiązaniem może być użycie Swift 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"
Takie podejście zapewni elastyczność, której potrzebujesz, używając normalnej składni Swift.
Może przyjrzyj się "inicjałowi wygody" tutaj: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/ TP40014097-CH18-ID215 – grominet