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
根据您的定义也是读写属性。