作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是编程新手尝试在 iOS 应用程序中管理数据时遇到问题将 Realm 与泛型一起使用。为了清楚地分离 MVC 模型,我制作了三个快速类,如下所示
模型定位器.swift
import UIKit
import RealmSwift
class ModelLocator : NSObject {
class var sharedInstance : ModelLocator {
struct Singleton {
static var instance = ModelLocator()
}
return Singleton.instance
}
var tasks = TaskModel<Object>()
override init() {
print("ModelLocator init!")
}
func getTask() -> TaskModel<Object> {
return tasks
}
func setTask(array:TaskModel<Object>) -> TaskModel<Object> {
tasks = array
return tasks
}
}
模型数据.swift
import UIKit
import RealmSwift
let realm = try! Realm()
class TaskModel <T: Object>: NSObject {
var resources : Results<T>!
func getResources() -> Results<T> {
return resources
}
func fetchData(database: T) {
self.resources = try! Realm().objects(database.dynamicType).sorted("date", ascending: false)
}
func saveTaskData(number : Int, item : T ){
let taskData:TaskData = TaskData()
try! realm.write {
switch number {
case 0:
taskData.id = item as! Int
break
case 1:
taskData.title = item as! String
break
default:
break
}
}
}
}
任务数据.swift
import RealmSwift
class TaskData: Object {
dynamic var id = 0
dynamic var title = ""
dynamic var category: Category?
// category.id:Int, category.name:String, category.priority:Int
dynamic var contents = ""
dynamic var date = NSDate()
/* set id as primary */
override static func primaryKey() -> String {
return "id"
}
}
并在 ViewController.swift 中如下调用它
View Controller
import UIKit
import RealmSwift
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tbView: UITableView!
var taskModel: TaskModel<Object> = TaskModel()
var taskArray: Results<TaskData>?
var category: Category = Category()
override func viewDidLoad() {
super.viewDidLoad()
let modelLocator = ModelLocator()
taskModel = modelLocator.getTask()
let database = "TaskData"
taskArray = taskModel.fetchData(TaskData) // <- Where there is error in line
print(taskArray)
在构建时,上面的行显示了一条错误消息
"cannot convert value of type'(TaskData).Type' (aka 'TaskData.Type') to expected argument type 'Object'"
我知道 left 和 right 的类型不匹配,但不知道如何更正它。 (aka 的意思对我来说很陌生,谷歌搜索也没有帮助我)
谁能告诉我应该如何修复这段代码?
最佳答案
TaskModel.fetchData
期望类型为 Object
的参数在那种情况下,因为您将类参数化为类型 T
.
您传入一个类型为 TaskData.Type
的值,这是元类型/类值,而不是实际实例。
你想要的是 fetchData
根本没有争论。您可以通过调用 realm.objects(T.self)
获得结果相反。
关于swift - 在 Swift 中通过泛型使用 Realm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36121544/
我是一名优秀的程序员,十分优秀!