我创建了一个iOS应用来仲裁柔术/柔道比赛。我的应用程序有一个Fighter
类。在这个Fighter
类中,我还有一个opponent
类型的Fighter
属性。所以我有这样的东西:
class Fighter {
...
var opponent: Fighter?
...
}
var fighter1 = Fighter()
var fighter2 = Fighter()
fighter1.opponent = fighter2
fighter2.opponent = fighter1
我宣布它是可选的,但由于不希望它是可选的而被困,战斗机必须有一个对手。这样可以很好地工作,但是我不喜欢它,最后我得到了很多不必要的if let
或!
。再加上丑陋。
我该如何以更好和更安全的方式做到这一点?
答案 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
}
使用结构而不是类,您将免费获得构造函数