如何在struct/中引用结构中的属性



我正试图了解如何使用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())

最新更新