Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何修复Swift 3错误&x2018;无法对不可变值&x2018;已加载的POST’;仅获取属性’;?_Ios_Swift_Uitableview - Fatal编程技术网

Ios 如何修复Swift 3错误&x2018;无法对不可变值&x2018;已加载的POST’;仅获取属性’;?

Ios 如何修复Swift 3错误&x2018;无法对不可变值&x2018;已加载的POST’;仅获取属性’;?,ios,swift,uitableview,Ios,Swift,Uitableview,我在学习斯威夫特。我想用UITableViewCellEditingStyle删除帖子,但它不起作用。它表明: 无法对不可变值使用mutating成员:“loadedPost”get only属性 行中: Dataservice.instance.loadedPosts.removeAtIndex(indexPath.row) 如何修复语法 这是第一个viewController: func tableView(_ tableView: UITableView, commit editingS

我在学习斯威夫特。我想用
UITableViewCellEditingStyle
删除帖子,但它不起作用。它表明:

无法对不可变值使用mutating成员:“loadedPost”get only属性

行中:

Dataservice.instance.loadedPosts.removeAtIndex(indexPath.row)
如何修复语法

这是第一个viewController:

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()
    }

可能是您在singleton loadedPosts中只使用getter而不使用setter指定公共数组,也就是说,使用这种方法,您无法对其进行修改。提供一个二传手应该有效吗

i、 只有在这里你才需要一个二传手

var loadedPosts: [Post] {
    return _loadedPosts
}
也许像这样

var loadedPosts: [Post] {
   get{
      return _loadedPosts
   } set{
      _loadedPosts = newValue
   }   
}

怎样做二传手?。我是新来的。你也有问题2和3的答案吗?上面的代码,我说“也许像这样”。这里您提供了一个getter和setter。这里再次使用var loadedPosts:[Post]{get{return{u loadedPosts}set{{u loadedPosts=newValue}}来添加读取数据的get方法和将数据分配给变量的set方法。在这种情况下,您需要清除数组,以便能够写入变量这是一个快速编程的基础。您应该阅读苹果的免费iBook,“Swift编程语言”。它涵盖了诸如计算属性(您拥有的)和使用自定义getter和setter定义属性等语言基础。
loadedPosts
根据您的定义是只读属性,
\u loadedPosts
根据您的定义也是读写属性。