我正试图了解如何使用Structs/Classes使我的代码最高效,我正试图通过下面的例子来理解它。
如果有人能纠正我或指导我,我将不胜感激:
举个例子,我会用哈利波特。这里有四栋房子,每栋房子都有一定的特色。
所以现在我有了其中两个的结构:
struct Gryffindor {
let name = "Gryffindor"
let characteristic = "Brave"
let image = Image("Lion")
}
struct Slytherin {
let name = "Slytherin"
let characteristic = "Cunning"
let image = Image("Snake")
}
现在,如果我希望有一个如下所示的向导结构,但我不知道如何在其中包含House属性,这样当我尝试创建向导的实例时,我可以从它们各自的房子中调用属性。
struct Wizard {
let name: String
var house: ?
}
let harryPotter = Wizard(name: "Harry", house: Gryffindor)
基本上,我希望能够使用harryPotter实例来指代哈利的房子,例如:
print(harryPotter.characteristic) //should print "Brave"
我努力实现的目标可能实现吗?
首先,您将类型与对象混合,因此您应该有一个类型House
struct House {
let name: String
let characteristic: String
let image: Image
}
然后在向导结构中使用
struct Wizard {
let name: String
var house: House
}
现在,您首先为向导创建一个House对象,然后创建向导对象
let gryffindor = House(name: "Gryffindor", characteristic: "Brave", image: Image("Lion"))
let harryPotter = Wizard(name: "Harry", house: gryffindor)
或一次呼叫中的全部
let harryPotter = Wizard(name: "Harry",
house: House(name: "Gryffindor", characteristic: "Brave", image: Image("Lion")))
使用协议&泛型,如下所示。使用Xcode 11.4进行测试。
protocol House {
var name: String { get }
var characteristic: String { get }
var image: Image { get }
}
struct Gryffindor: House {
let name = "Gryffindor"
let characteristic = "Brave"
let image = Image("Lion")
}
struct Wizard<H: House> {
let name: String
var house: H
}
let harryPotter = Wizard(name: "Harry", house: Gryffindor())