swift - 创建基于ERD的类架构

标签 swift erd

为了简单起见:假设您有一个包含下表的实体关系图 (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/

相关文章:

swift - 尝试存储 CGColor 类型元素时,数组作为实例变量崩溃(Xcode 6 beta 4)

swift - Firebase Crashlytics 'Error loading your issues' 和上传符号脚本错误 - 使用 XCode 的 iOS 应用程序

swift - tableview 单元格中的 pickerview 不起作用

database - 这个图有冗余吗?

ios - Localizable.strings 不翻译短语

c++ - 在 Swift 项目中使用 OpenCV 时无法构建模块 'opencv2'

mysql - 在 ERD 建模中,关系是否映射到数据库表

java - 如何在java中将实体图(.vpp)转换为数据库或文本文件

mysql - 需要帮助为食品银行设计 ERD

SQL - 查询 - max(count())