这是处理领域中两个类似对象的正确方法吗?

时间:2017-03-05 05:56:45

标签: ios swift core-data swift3 realm

我正在开发一个资金跟踪器应用程序,我有两个不同的对象。一个是交易'其中包含发生的所有交易,第二个是“RecurringTransaction'其中包含所有定期交易。

我使用Recurring事务就像一个模板,其中包含创建事务所需的所有信息。我提供了清除交易的选项,因此一旦用户清除了定期交易,那么我只创建一个交易。我在我的应用程序中使用Realm。

这些是对象:

class Transaction: Object {

  dynamic var id: String = UUID().uuidString
  dynamic var title: String = ""
  dynamic var amount: Double = 0
  dynamic var createdAt: Date = Date()
  dynamic var category: Category?
  dynamic var recurringTransaction: RecurringTransaction?
  dynamic var type: TransactionType = .Income
}

class RecurringTransaction: Object {

  dynamic var id: String = UUID().uuidString
  dynamic var title: String = ""
  dynamic var amount: Double = 0
  dynamic var createdAt: Date = Date()
  dynamic var category: Category?
  dynamic var type: TransactionType = .Income
  dynamic var frequency: TransactionFrequency = .Monthly
}

这是正确的方法吗?正如您所看到的,两者都包含相似的属性,但同时两者都不同:一个是实际事务,另一个是模板。

还有一个问题,如果我使用coredata会有什么不同?因为我对coredata没有多少经验

2 个答案:

答案 0 :(得分:0)

如果<html> <head> <title></title> <link rel="stylesheet" type="text/css" href="effects.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> </head> <body> <nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#"><div class="glyphicon glyphicon-pencil"></div> Rate Gitam</a> </div> <p class="navbar-text">Gitam university's first rating site</p> </div><!-- /.navbar-collapse --> </nav> <div class="jumbotron"> <h1>Rate your professor</h1> <p>Rate your professor and choice of your elective on a five point scale</p> </div> <div class="col"> <form class="form-horizontal "> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">Faculty Name</label> <div class="col-lg-3"> <input type="text" class="form-control" id="inputEmail3" placeholder=" Faculty Name"> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-2 control-label">rating</label> <div class="col-lg-3"> <input type="text" class="form-control" id="inputPassword3" placeholder="Rating"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">Submit</button> </div> </div> </form> </div> </body> </html>一个var finishIt bool func RecursiveFunc(x int, depth int, quit chan bool) int { if finishIt { return 0 } //other code here } //some code here, but than we decide to stop it finishIt = true 类是可选的,那该怎么办? 如果它设置为Transaction,那么这是一个正常的交易,如果它有一个值,那么它就是一个定期交易。如果您要拆分课程,frequency可能是nil的子类,只会添加RecurringTransaction字段。

答案 1 :(得分:0)

Realm支持在有限程度上对对象进行子类化。如果将Object子类化为另一个Object子类,则子类将包含超类的所有属性以及它自己的属性。这将在数​​据库中创建两个单独的表,跟踪每种类型。

因此,您不需要具有冗余属性名称。这样的事情应该有效:

class Transaction: Object {
    dynamic var id: String = UUID().uuidString
    dynamic var title: String = ""
    dynamic var amount: Double = 0
    dynamic var createdAt: Date = Date()
    dynamic var category: Category?
    dynamic var recurringTransaction: RecurringTransaction?
    dynamic var type: TransactionType = .Income
}

class RecurringTransaction: Transaction {
    dynamic var frequency: TransactionFrequency = .Monthly
}

(完全披露:我为Realm工作)如果Realm是一个选项并且您没有Core Data经验,我不建议您尝试使用Core Data。学习曲线和所需的样板代码量并不是一件容易实现的事情。