gpt4 book ai didi

swift - 在 Swift 中通过泛型使用 Realm

转载 作者:搜寻专家 更新时间:2023-11-01 07:26:06 26 4
gpt4 key购买 nike

我是编程新手尝试在 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/

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