gpt4 book ai didi

swift - 创建基于ERD的类架构

转载 作者:行者123 更新时间:2023-11-30 11:45:25 25 4
gpt4 key购买 nike

为了简单起见:假设您有一个包含下表的实体关系图 (ERD):

  1. 调查:ID、姓名、问题
  2. 问题:ID、文本、调查

在这种情况下,调查一个或多个问题,并且问题属于一项 调查

我的问题是,我可以仅使用类重新创建此架构,而无需任何持久层(如领域或核心数据)吗?这是我的意思的简单演示:

struct Survey {
var id: Int
var name: String
var questions: [Question] // 1 or more questions
}

struct Question {
var id: Int
var text: String
var survey: Survey // belongs to only one survey
}

我尝试了这种方法,但显然由于一对多关系,以下代码将不起作用:

let survey = Survey(id: 0, name: "First survey", questions: [
Question(id: survey.id, text: "Whats your name", survey: survey) // This is not possible.
])

更多背景:我想创建一个调查应用程序。该应用程序的架构很难设计,因为调查将支持多种类型的问题(多项选择、开放式问题、是/否问题等)。通过在线搜索,我发现有一些针对类似 this 的调查的 ERD 设计。一。问题是这个 ERD 设计是针对数据库的..但我现在不想创建数据库。然而,我认为在架构上设计可以使用类来表示。那么问题是如何?

最佳答案

这两个对象之间存在依赖关系,因为两个结构的初始化程序都希望之前创建其他结构,这只是设计中的错误。您可以通过使用可选或隐式解包可选(这是不安全的)来解决这种依赖关系。

这是解决这个问题的一种明显方法,

struct Survey {
var id: Int
var name: String
var questions: [Question]! // 1 or more questions

init(id: Int, name: String) {
self.id = id
self.name = name
}
}

struct Question {
var id: Int
var text: String
var survey: Survey // belongs to only one survey
}

因此,您可以创建一个对象,而不需要创建其他结构并只需使用赋值,而不是在初始值设定项内传递对象。

var survey = Survey(id: 0, name: "First survey")
survey.questions = [
Question(id: survey.id, text: "Whats your name", survey:survey) // This is not possible.
]

关于swift - 创建基于ERD的类架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48886582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com