несколько инициализаторов в Swift - PullRequest
0 голосов
/ 03 июля 2018
Error: play.playground:34:5: error: invalid redeclaration of 'init'

Как мне иметь несколько инициализаторов для класса в Swift? Я думал, что если бы я дал разные параметры для каждого init, то у каждого init была бы своя сигнатура метода, и я мог бы создать несколько из них. Почему это не работает, или я ошибся где-то еще? (Ниже вытащен с детской площадки.)

//make a class
class Human{
    var name: String
    var age: Int
    init(_ name: String){
        self.name = name
        self.age = -1
    } 
    init(name: String, age: Int){
        self.name = name
        self.age = age

    }
}

var newHuman = Human("bob")
print(newHuman.name)

var newHuman2 = Human(name: "Marmelade", age: 19)
print(newHuman2)

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Вы пробовали convenience ключевое слово?

//make a class
class Human{
    var name: String
    var age: Int
    convenience init(_ name: String){
        self.init(name: name, age: -1)
    }
    init(name: String, age: Int){
        self.name = name
        self.age = age

    }
}

var newHuman = Human("bob")
print(newHuman.name)

var newHuman2 = Human(name: "Marmelade", age: 19)
print(newHuman2)
0 голосов
/ 15 апреля 2019
class Your_ViewController : UIViewController {

    var yourFirstProperty : String?
    var yourSecondProperty : String?

    init(yourFirstProperty: String) {
        self.yourFirstProperty = yourFirstProperty
        self.yourSecondProperty = nil
        super.init(nibName: nil, bundle: nil)
    }

    init(yourSecondProperty: String) {
        self.yourSecondProperty = yourSecondProperty
        self.yourFirstProperty = nil
        super.init(nibName: nil, bundle: nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) is not supported")
    }
}

Вы можете легко иметь несколько инициализаторов для вашего контроллера представления. Я написал контроллер представления, который можно инициализировать двумя способами и

это для программистов, которые делают интерфейс с чистым кодом

0 голосов
/ 03 июля 2018

Вы можете передать больше параметров со значением по умолчанию, например sex: String = ""

init(name: String, age: Int = 0, gender: String = ""){
    self.name = name
    self.age = age

}

var newHuman = Human("bob")
print(newHuman.name)

var newHuman2 = Human(name: "lol", age: 0)
print(newHuman2)

var newHuman3 = Human(name: "lol", age: 3, gender: "Male")
print(newHuman2)
...