Удобный инициализатор продолжает падать, однако назначенный инициализатор работает нормально? - PullRequest
0 голосов
/ 29 марта 2019

При создании экземпляра с использованием удобного инициализатора игровая площадка продолжает выдавать мне эту ошибку «ошибка: выполнение было прервано, причина: EXC_BAD_ACCESS (code = 2, address = 0x7ffee5ae9ff8)», однако при использовании назначенного инициализатора все работает нормально.

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

class FootballTeams {

 var liverpool: String
 var chelsea: String
 var manchesterunited: String
 var arsenal: String = "fourth"

 init(arsenal:String, chelsea:String,     
      liverpool: String, manchesterunited:String ) { //designated initialiser
    self.arsenal = arsenal
    self.chelsea = chelsea
    self.liverpool = liverpool
    self.manchesterunited = manchesterunited
}

 convenience init(arsenal: String){
    self.init(arsenal: arsenal) //call to designated initialiser   above
    self.arsenal = arsenal
}
}

let properInstance = FootballTeams(arsenal: "Overides stored  property value", chelsea: "a", liverpool: "b", manchesterunited: "b")
print(properInstance.arsenal)

let convenienceInstance = FootballTeams(arsenal: "This is an instance from the convenience init")
print(convenienceInstance.arsenal)

1 Ответ

1 голос
/ 29 марта 2019

Вы работаете в бесконечном цикле, разве вы не видели предупреждение

Все пути через эту функцию будут вызывать себя

Это означает init(arsenal вызовыinit(arsenal, который вызывает init(arsenal, который вызывает init(arsenal, который вызывает init(arsenal, который ... ?

Чтобы вызвать вспомогательный инициализатор, необходимо вызвать назначенный инициализатор и предоставить значения по умолчанию

convenience init(arsenal: String) {
    self.init(arsenal: arsenal, chelsea:"sixth", liverpool: "first", manchesterunited: "fifth") //call to designated initialiser   above
}

Дополнительная строка self.arsenal = arsenal является избыточной.

...