ios - 如何修复 Swift 3 错误 ‘cannot use mutating member on immutable value: ‘loadedPost’ 只获取属性?

标签 ios swift uitableview

我正在学习 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/

相关文章:

ios - NSDateFormatter 问题,而来自字符串的 NSDate 仅包含时间

iOS - UITableView 不同部分的不同单元格类型

iOS 本地化,应用程序中的语言更改

ios - 如何从 UITableView 中获取选定的行?

ios - UITableViewCell 中的简单 UIStackView 在 IB 中无法正确计算高度

ios - Xcode7与array.filter方法的误解

ios - 将可转换的 NSAttributedString 保存到核心数据时发生极其奇怪的崩溃

ios - 如何以编程方式为 UIButton 添加系统图标?

ios - 如何检测用户是否在应用程序运行时更改了 iPhone 系统语言设置?

iphone - 在 Interface Builder 中设置 UITableViewCell 的宽度是多少?