2

使用便利初始化程序创建实例时,操场一直给我这个错误“错误:执行被中断,原因:EXC_BAD_ACCESS(代码= 2,地址= 0x7ffee5ae9ff8)”但是当使用指定的初始化程序时它工作正常。

我不完全确定我是否正确设置了便利初始化程序,以便在创建新实例时只需要 arsenal 参数。

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)
4

1 回答 1

4

您正在陷入无限循环,您没有看到警告吗

通过这个函数的所有路径都会调用自己

这意味着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是多余的。

于 2019-03-29T12:01:31.183 回答