Swift 如何更好地构建这些数据?

Swift 如何更好地构建这些数据?,swift,Swift,我有以下代码: class Book { let title = "" let description = "" let ebookPath = "" let featuredCategories = [FeaturedCategory]() let authors = [Author]() let publishers = [Publisher]() //... } class FeaturedCategory { let na

我有以下代码:

class Book {
    let title = ""
    let description = ""
    let ebookPath = ""
    let featuredCategories = [FeaturedCategory]()
    let authors = [Author]()
    let publishers = [Publisher]()
    //...
}

class FeaturedCategory {
    let name = ""
    let books = [Book]()
}

class Author {
    let name = ""
    let books = [Book]()
}

class Publisher {
    let name = ""
    let books = [Book]()
}


class Tag {
    let name = ""
    let books = [Book]()
}
从上面的代码中可以看出,有很多重复。如果我添加更多具有相同变量
name
books
的类,这会变得更加糟糕。什么是更好的选择

编辑:我正在从Firebase下载JSON。以下是JSON结构:


嗯,这个问题可以从很多方面得到回答,但我会尝试分享我的观点

首先,尝试使用
struct
而不是
class
,因为这样可以使体系结构更加灵活

其次,使用
协议
创建关系

小例子:

//Struct insted of class
struct Book {
    //Usage of the let in struct is good practice.
    let title: String
    let description: String
    let ebookPath: String
    let featuredCategories: [FeaturedCategory]
}

//Base protocol
protocol HasBooks {
    var name: String { get }
    var books: [Book] { get }
}

//Strcut that reuqires to implement name and books.
struct FeaturedCategory : HasBooks {
    var name = ""
    var books = [Book]()
}

嗯,这个问题可以从很多方面得到回答,但我会尝试分享我的观点

首先,尝试使用
struct
而不是
class
,因为这样可以使体系结构更加灵活

其次,使用
协议
创建关系

小例子:

//Struct insted of class
struct Book {
    //Usage of the let in struct is good practice.
    let title: String
    let description: String
    let ebookPath: String
    let featuredCategories: [FeaturedCategory]
}

//Base protocol
protocol HasBooks {
    var name: String { get }
    var books: [Book] { get }
}

//Strcut that reuqires to implement name and books.
struct FeaturedCategory : HasBooks {
    var name = ""
    var books = [Book]()
}

最好在问题中包含更多细节。“此数据”非常模糊。您有用于上述内容的JSON吗?请查看editIn类手册,您已经添加了两次“authors”变量。这会导致编译时错误“作者重新声明无效”。请检查一下。我把代码作为例子贴了出来。但是谢谢你指出。在问题中加入更多细节会更好。“此数据”非常模糊。您有用于上述内容的JSON吗?请查看editIn类手册,您已经添加了两次“authors”变量。这会导致编译时错误“作者重新声明无效”。请检查一下。我把代码作为例子贴了出来。但是谢谢你指出。我会为协议选择一个类似HasBooks的名字。这是一个更好的改进,但是如果我有,比方说,20个具有相同精确数据的结构会怎么样?这不是有点奇怪吗?我会为协议选择一个类似HasBooks的名字。这是一个更好的改进,但是如果我有,比方说,20个具有相同精确数据的结构会怎么样?这不是有点奇怪吗?