gpt4 book ai didi

mvvm - 使用MVVM处理 Realm 和服务

转载 作者:行者123 更新时间:2023-12-03 10:26:28 25 4
gpt4 key购买 nike

我正在尝试使用Realm和Alamofire将项目重构为MVVM模式。

我找不到在哪里进行API调用以及在哪里必须使用Realm将数据写入DB的精确答案。我的猜测是它应该在模型中。

例如,我想显示用户个人资料。这个例子是正确的,我应该在哪里进行API调用?我的问题是我需要为服务和模型创建许多静态/类函数,并且不能使用自动更新结果。

// Model
class User: Object {
class function get(whereIdentifier identifier: Int) {
let realm = try! Realm()
let predicate = NSPredicate(format: "identifier = %d", identifier)
return realm.objects(Runner.self).filter(predicate).first
}
}

// ViewModel
struct UserViewModel {
init(user userModel: User) {
}

static func get(whereIdentifier identifier: Int) -> UserViewmodel? {
// Return a UserViewModel to show on the ViewController
}
}


// I got a service like
struct UserService: Networkable {
func get(whereUser user: User, completionHandler: @escaping (Result<User>) -> Void) {
// Return a user from API
}
}


// I got a service like
struct UserService: Networkable {
func get(whereUser user: User, completionHandler: @escaping (Result<User>) -> Void) {
// Return a user from API
}
}

最佳答案

我们已经通过这种方式解决了这个问题。

  • ViewController向我们的APIManager发出请求
  • APIManager负责使用Alamofire进行API调用并读取JSON响应。它调用我们的DataManager(这是对User.get方法的抽象)来创建适当的Realm对象,并在Realm中创建/更新/删除它们。我们使用ObjectMapper处理每个模型对象中的映射
  • ViewController还从我们的DataManager创建一个自动更新查询对象。
  • 对于因API响应而发生的任何更改,ViewController也订阅realm.notifications

  • 看起来像这样(半伪代码):
    var users:Results<User> = DataManager.shared.objects(User.self, whereIdentifier: id)
    notificationToken = realm.addNotificationBlock { [weak self] (notification, realm) in
    self?.updateViewModel()
    }
    updateViewModel()
    APIManager.shared.loadUser(id: id)

    func updateViewModel() {
    //parse users data into whatever format you need for your VM
    }

    关于mvvm - 使用MVVM处理 Realm 和服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42292172/

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