Arrays 如何使用另一个类的变量打印一个类的元素?
我创建了两个类:Person类和food类。现在,我正在列出一个人一年中消费的所有食物。我想把它们全部打印出来,用逗号隔开 这是我的密码Arrays 如何使用另一个类的变量打印一个类的元素?,arrays,swift,class,methods,swift3,Arrays,Swift,Class,Methods,Swift3,我创建了两个类:Person类和food类。现在,我正在列出一个人一年中消费的所有食物。我想把它们全部打印出来,用逗号隔开 这是我的密码 class Food { let name: String var EatenBy: Person? init(name: String){ self.name = name } } 我的个人课程如下 class Person { var name
class Food {
let name: String
var EatenBy: Person?
init(name: String){
self.name = name
}
}
我的个人课程如下
class Person {
var name: String
var foods: [Food] = []
lazy var foodNames: () -> String = {
return ""
}
init(name: String){
self.name = name
}
func adopt(food: Food){
foods.append(food)
food.EatenBy = self
}
}
现在,我想使用food类创建不同的食物项,然后将其分配给食用过这些食物的人,并将其存储在食物数组中
var person = Person(name: "Test")
var pasta = Food(name: "pasta")
有人能帮我吗?我如何使用使用Food类创建的对象,并将其分配给Person类中创建的对象,然后将它们附加到foods数组中
我的最终目标是打印foods数组中的所有元素,使用逗号或空格或诸如此类的方式将它们分隔开,我想这可以通过将每个元素循环到for循环来轻松实现?使用
Person
实例,您可以访问其属性(包括点语法的foods
数组:person.foods
)
要打印食品名称,您应该将foodNames
声明为计算属性。作为其返回值,只需使用map
获取每个food
实例的名称,然后使用[String].joined(分隔符:“,”
将字符串数组的内容合并为单个字符串
class Person {
var name: String
var foods: [Food] = []
var foodNames:String {
return foods.map{$0.name}.joined(separator: ",")
}
init(name: String){
self.name = name
}
func adopt(food: Food){
foods.append(food)
food.EatenBy = self
}
}
class Food {
let name: String
var EatenBy: Person?
init(name: String){
self.name = name
}
}
let john = Person(name: "John")
let pasta = Food(name: "pasta")
john.foods = [pasta, Food(name: "tuna")] //assign an array to the variable directly
john.foods.append(Food(name: "tomato")) //or append the existing array
john.adopt(food: Food(name: "bread")) //you can also use your _adopt_ function to add an element to the _foods_ array of a _Person_ instance
john.foodNames // "pasta, tuna, tomato,bread"
看起来您缺少了一些关于Swift工作原理的基本概念(比如使用点语法访问类属性),因此我建议您从阅读开始,这对于初学者Swift开发人员来说是一个非常有用的起点。使用
Person
实例,您可以访问其属性(包括点语法的foods
数组:person.foods
)
要打印食品名称,您应该将foodNames
声明为计算属性。作为其返回值,只需使用map
获取每个food
实例的名称,然后使用[String].joined(分隔符:“,”
将字符串数组的内容合并为单个字符串
class Person {
var name: String
var foods: [Food] = []
var foodNames:String {
return foods.map{$0.name}.joined(separator: ",")
}
init(name: String){
self.name = name
}
func adopt(food: Food){
foods.append(food)
food.EatenBy = self
}
}
class Food {
let name: String
var EatenBy: Person?
init(name: String){
self.name = name
}
}
let john = Person(name: "John")
let pasta = Food(name: "pasta")
john.foods = [pasta, Food(name: "tuna")] //assign an array to the variable directly
john.foods.append(Food(name: "tomato")) //or append the existing array
john.adopt(food: Food(name: "bread")) //you can also use your _adopt_ function to add an element to the _foods_ array of a _Person_ instance
john.foodNames // "pasta, tuna, tomato,bread"
看起来您缺少了一些有关Swift工作原理的基本概念(例如使用点语法访问类属性),因此我建议您先阅读,这对于初学者Swift开发人员来说是一个非常有用的起点。谢谢您的帮助。谢谢您提供的链接,我也会仔细阅读。另一个Swift课程是不要将所有内容都变成类。
Person
很有意义,因为每个实例都是唯一的;它都有标识。但是有一个Food
类没有。Bean的两个不同实例将有两个不同的eatenBy
引用。所有权已通过包含在Person对象中来定义。例如,遍历所有人以查找其foods数组中包含Bean的人。Food
可以是结构或枚举。@pricingo它取决于exact此类类的使用。将Food
作为一个类是有意义的,例如,如果这是数据库类,那么在这两个类之间建立双向关系也是有意义的。绝对正确,但现在我们正在阅读比所述内容更多的需求。谢谢你按照我的要求工作。感谢链接t哦,我会仔细研究一下。另一个快速的教训是不要把所有东西都变成一个类。Person
有意义,因为每个实例都是唯一的;它有身份。但是拥有一个Food
类却没有。两个不同的Bean实例会有两个不同的eatenBy
引用。所有权已经通过包含在Person对象。也就是说,遍历所有的Person以查找其foods数组中包含bean的Person对象。Food
可以是一个结构或枚举。@Pricingo这取决于此类类的确切用法。将Food
设为类是有意义的,例如,如果这些是数据库类,则具有双向关系是有意义的这两个类之间的关系。绝对正确,但现在我们正在阅读更多的要求,而不是所说的。