Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何使用另一个类的变量打印一个类的元素?_Arrays_Swift_Class_Methods_Swift3 - Fatal编程技术网

Arrays 如何使用另一个类的变量打印一个类的元素?

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

我创建了两个类:Person类和food类。现在,我正在列出一个人一年中消费的所有食物。我想把它们全部打印出来,用逗号隔开

这是我的密码

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
设为类是有意义的,例如,如果这些是数据库类,则具有双向关系是有意义的这两个类之间的关系。绝对正确,但现在我们正在阅读更多的要求,而不是所说的。