【问题标题】:How to print elements of one class using variable of another class?如何使用另一个类的变量打印一个类的元素?
【发布时间】:2017-09-08 13:21:26
【问题描述】:

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

这是我的代码

class Food {
        let name: String
        var EatenBy: Person?
        init(name: String){
            self.name = name
        }
    }

而我的 Person 类如下

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 类中创建的对象并将它们附加到 food 数组中?

我的最终目标是打印 food 数组中的所有元素,使用逗号或空格等分隔它们,我想这可以通过 for 循环循环每个元素来轻松完成?

【问题讨论】:

    标签: arrays swift class methods swift3


    【解决方案1】:

    使用Person 实例,您可以访问其属性(包括通过点语法的foods 数组:person.foods

    为了打印食物名称,您应该将foodNames 声明为计算属性。作为其返回值,只需使用map 获取每个Food 实例的名称,然后使用[String].joined(separator: ",") 将字符串数组的内容连接成一个字符串。

    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 工作原理的一些基本概念(例如使用点语法访问类属性),因此我建议您先阅读 The Swift Programming Language Guide,这对于初学者来说是一个非常有用的起点Swift 开发者。

    【讨论】:

    • 谢谢你按我的要求工作。也谢谢你的链接,我会通过它。
    • 另一个 Swift 课程是不要把所有东西都变成一个类。 Person 有意义,因为每个实例都是唯一的;它有身份。但是拥有Food 类却没有。两个不同的 Bean 实例将有两个不同的 eatenBy 引用。通过包含在 Person 对象中已经定义了所有权。即遍历所有 Persons 以找到那些在它的 foods 数组中有 Beans 的人。 Food 可以是结构或枚举。
    • @PriceRingo 这取决于此类类的确切用法。将Food 设为一个类是有意义的,例如,如果这些是数据库类,那么在两个类之间建立双向关系是有意义的。
    • 绝对正确,但现在我们对要求的了解比规定的要多。
    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2014-10-06
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多