Class 为一对多关系实现类结构。敏捷的

Class 为一对多关系实现类结构。敏捷的,class,swift,structure,one-to-many,Class,Swift,Structure,One To Many,基本上,我试图为一个人和他的宠物实现一个类。在非常简单的形式中,Person类和Pet类如下所示: class Person { var email : String! var name : String! var pets : [Pet]! init(userName: String) { email = userName // load Person from CloudKit database } } c

基本上,我试图为一个人和他的宠物实现一个类。在非常简单的形式中,Person类和Pet类如下所示:

class Person {
    var email  : String!
    var name   : String!
    var pets   : [Pet]!

    init(userName: String) {
        email = userName

       // load Person from CloudKit database
    }
}

class Pet {
    var name   : String!
    var breed  : String?
}
现在我想能够加载与特定用户名相关的所有宠物。如果我有以上的等级,那只能养一只宠物。如果我在Person类中执行类似的数组,则没有Load方法。问题是,我是否应该创建一个新类,如下所示:

class Pets {
    var userName : String
    var pets     : [Pet]

    init(email: String) {
        // load all pets related to user here
    }
}

这有意义吗?还是有更好的方法来组织班级?我的问题清楚吗?提前感谢您的帮助。

我的数据模型将使用结构而不是类

除非我真的必须使用,否则我不会使用optionals,而且有一些用例是必须使用的。我也不会使用隐式展开选项。。。即!这是一个有原因的“感叹号”。你应该仔细阅读何时使用不同类型的选项


我不会有一个像你创建的宠物类。所有这些都将存储在您要查询的数据库中。。。可能是核心数据,或者如果您有其他类来保存数据,那么它只是一个[String:[Pet]]的字典/映射,您可以从该字典/映射中查找所有宠物的用户名,我想这是有意义的是
var init
String到处都是,
email=userName
,这对我来说没什么意义。我假设您需要类似
func findPetsOf(用户名:String,inContacts contacts:[Person])->[Pet]?
。不需要额外的课程。在最坏的情况下,让它返回一个元组
(用户名:String,pets:[Pet]?)
var init
是一个拼写错误,已更正。真正的类比这个长得多。为了便于讨论,我试着在这里做一个精简版本。你可以把它看作是伪代码。findPetsOf函数将驻留在哪里?在Person类中?如果是这样,您的意思是宠物的所有加载和保存逻辑都应该在Person类中处理。我说的对吗?我正在使用CloudKit,实际上你的建议对我来说很有意义。我将简单地创建一个新的字符串数组字段,并将宠物保存在Person表中。就选项而言,我提供的代码或多或少是一个伪代码。不过,我也会阅读更多关于期权的信息。非常感谢。