谁能解释为什么我可以将值设置为仅获取属性?
这里是示例。该协议包含自定义类类型的get-only属性,并且该类符合该类。
protocol ViewModel {
var title: MyTitle { get }
}
class MyTitle {
var title: String
var otherProperty: Int
}
class MyViewModel: ViewModel {
var title: MyTitle
init() {
self.title = MyTitle.init()
}
func didChangeTitle(title: String) {
self.title.title = title
}
}
我认为title
属性应该是只读的,并且当用户完成编辑UITextView
时将触发MyViewModel中的功能。
class TableViewCell: UITableViewCell, UITextViewDelegate {
var viewModel: MyViewModel?
func bind(to viewModel: MyViewModel) {
self.viewModel = viewModel
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
self.viewModel?.title.title = textView.text /* Why can the property supposed to be get-only be changed here */
textView.resignFirstResponder()
return false
}
return true
}
}
但是实际上我可以不使用MyViewModel功能直接更新值。
有人可以解释吗?
答案 0 :(得分:1)
您实际上并不是通过遵循协议来声明get-only
属性。您可以使用计算属性,并通过
var title: String {
return "Something"
}
此外,您正在更改类中的属性,而不是该类本身
编辑
或者按照注释中的建议,您可以定义一个私有设置器
private (set) var title: String