2017-01-10 27 views
0

我正在學習斯威夫特。我想刪除UITableViewCellEditingStyle的帖子,但它不起作用。它顯示:如何解決Swift 3錯誤'不能在不可變值上使用變異成員:'loadedPost'只獲取屬性'?

不能使用不可變值可變成員:「loadedPost」獲得唯一的財產

在該行:

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

'loadedPosts'由您定義爲只讀屬性時,'_loadedPosts'的讀寫性能,同時,由你定義。 – holex

回答

1

難道說你只用一個getter和沒有setter指定你的單身loadedPosts公衆陣列即用這種方法你不能改變它。提供一個二傳手應該工作?

即使只是在這裏你也需要一個setter。

var loadedPosts: [Post] { 
    return _loadedPosts 
} 

也許這樣

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

如何製作二傳手?我是新來的。你也有問題2和3的答案嗎? – Andyopf

+0

上面的代碼我說「也許是這樣」。在這裏你提供了一個getter和setter。這又是VAR loadedPosts:[發佈] { 獲得{ 回報_loadedPosts }集合{ _loadedPosts = NEWVALUE }} 要 –

+0

添加GET手段來讀取數據,並設機構的數據賦值給變量。在這種情況下,你想清除你的數組,所以你需要能夠寫入變量 –

相關問題