包含自己类型的属性的Swift类

时间:2018-12-20 15:48:57

标签: swift

我创建了一个iOS应用来仲裁柔术/柔道比赛。我的应用程序有一个Fighter类。在这个Fighter类中,我还有一个opponent类型的Fighter属性。所以我有这样的东西:

class Fighter {
    ...
    var opponent: Fighter?
    ...
}

var fighter1 = Fighter()
var fighter2 = Fighter()
fighter1.opponent = fighter2
fighter2.opponent = fighter1

我宣布它是可选的,但由于不希望它是可选的而被困,战斗机必须有一个对手。这样可以很好地工作,但是我不喜欢它,最后我得到了很多不必要的if let!。再加上丑陋。

我该如何以更好和更安全的方式做到这一点?

3 个答案:

答案 0 :(得分:3)

创建一个包含两个Fighter对象的Match对象,而不是让Fighter包含另一个Fighter。类型应该很少包含自身。

例如:

observe*

答案 1 :(得分:1)

您可以将opponont声明为隐式解包的可选内容,但是我建议创建一个Match类或类似的东西,在其中存储两个对手,而不是在{{ 1}} s。除非您将该属性声明为Fighter,否则这也会导致强大的依赖周期。

答案 2 :(得分:-1)

尝试这样的事情:

struct Fight {
let fighter1: Fighter
let fighter2: Fighter
var date: Date

}

struct Fighter {
let name: String
let weight: Float
let category: AnyOtherCustomObjectThatYouWant
}

使用结构而不是类,您将免费获得构造函数