我正在学习 Swift。我想删除带有 UITableViewCellEditingStyle
的帖子,但它不起作用。它显示:
cannot use mutating member on immutable value: ‘loadedPost’ get only property
行内:
Dataservice.instance.loadedPosts.removeAtIndex(indexPath.row)
如何修复语法?
这是第一个 View Controller :
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
DataService.instance.loadedPosts.removeAtIndex(indexPath.row) //‘cannot use mutating member on immutable value: ‘loadedPost’ get only property’
self.onPostsLoaded()
}
}
这是另一个文件中的数组:
class DataService {
static var instance = DataService()
private var _loadedPosts = [Post]()
var loadedPosts: [Post] {
return _loadedPosts
}
func savePosts() {
let postsData = NSKeyedArchiver.archivedData(withRootObject: _loadedPosts)
UserDefaults.standard.set(postsData, forKey: "posts")
}
func loadPosts() {
if let postsData = UserDefaults.standard.object(forKey: "posts") as? Data {
if let postsArray = NSKeyedUnarchiver.unarchiveObject(with: postsData) as? [Post] {
_loadedPosts = postsArray
}
}
NotificationCenter.default.post(Notification(name: Notification.Name(rawValue: "postsLoaded"), object: nil))
}
func addPosts(post: Post) {
_loadedPosts.append(post)
savePosts()
loadPosts()
}
最佳答案
可能是您只在单例 loadedPosts 中使用 getter 而没有 setter 指定公共(public)数组,即使用这种方法您不能改变它。提供二传手应该行得通吗?
即这里只有 getter 你还需要一个 setter。
var loadedPosts: [Post] {
return _loadedPosts
}
大概是这样
var loadedPosts: [Post] {
get{
return _loadedPosts
} set{
_loadedPosts = newValue
}
}
关于ios - 如何修复 Swift 3 错误 ‘cannot use mutating member on immutable value: ‘loadedPost’ 只获取属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41570638/