gpt4 book ai didi

ios - 无法分配给属性 : 'outputs' is a get-only property

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

我正在尝试使用 MVVM Inputs Outputs 方法实现 VC,但是当我尝试在 View Controller 中绑定(bind)重新分配输出闭包时出现编译器错误。我确实明白“输出”是一个只能获取的属性,但它的属性是被设置的。
我该如何解决这个问题?

protocol ViewModelOutputsType {
var didReceiveServiceError: ((Error) -> Void) { get set }
var reloadData: (() -> Void) { get set }
}

protocol ViewModelType {
var outputs: ViewModelOutputsType { get }
}

final class ViewModel: ViewModelType, ViewModelOutputsType {
var outputs: ViewModelOutputsType { return self }

//output
var didReceiveServiceError: ((Error) -> Void) = { _ in }

var reloadData: (() -> Void) = {}
}

class ViewController: UIViewController {

var viewModel: ViewModel

init(viewModel: ViewModel) {
self.viewModel = viewModel
super.init(nibName: nil, bundle: nil)
}

private func bind() {
//this gives the compiler error
viewModel.outputs.didReceiveServiceError = { [weak self] error in

}
//this gives the compiler error
viewModel.outputs.reloadData = { [weak self] in

}
}
}

最佳答案

问题是 ViewModelOutputsType可以是值或引用类型。如果它是一个值类型,那么改变它的任何属性都会改变实例本身。您可以通过使协议(protocol)类受到约束并因此保证它是引用类型来解决该问题。

protocol ViewModelOutputsType: class {
var didReceiveServiceError: ((Error) -> Void) { get set }
var reloadData: (() -> Void) { get set }
}

关于ios - 无法分配给属性 : 'outputs' is a get-only property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62996960/

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