删除 Swift 中 UserDefaults 的单个键值 3

Removing a single key value of UserDefaults in Swift 3

我在我的 iOS 应用程序中使用 UserDefaults 跟踪用户的偏好——当用户选择 table 单元格时,它会将单元格的文本添加到我的键中。那部分有效。

现在,我想允许用户在选择一行时从键中删除匹配的键值。如果一个单元格显示 "Episode 1",它应该从 UserDefaults.

中删除值

the documentation 开始,removeObject 有一个实例方法。这是我写的:

    let defaults = UserDefaults.standard
    var myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()
    if let datastring = TableData[indexPath.row] as? String {
        if !myarray.contains(datastring) {
            myarray.append(datastring)
            defaults.removeObject(myarray, forKey: "SavedStringArray")
            defaults.synchronize()
        }

这个 return 是 Extra argument in call 的一个错误——我假设它的意思是 myarray,但是如果我不能添加那个参数,我怎么能告诉它只删除一个值(存储在 myarray 中)?

如果我打印 UserDefaults.standard,它将 return 存储的剧集值列表,如`["First Episode"、"Second Episode"、"Third Episode"]

知道如何在单击此处的单元格时删除 Third Episode 吗?

如果字符串不存在,您可以添加;如果字符串存在,您可以删除。然后更新数组。 然后为键设置该数组。

if !myarray.contains(datastring) {
    myarray.append(datastring)
} else {
    myarray = myarray.filter{[=10=] != datastring}
}
defaults.set(myarray, forKey: "SavedStringArray")

我有以下适合您的代码。

if myarray.contains(datastring) {
    myarray.remove(at: myarray.index(of: datastring)!)
} else {
    myarray.append(datastring)
}
defaults.set(myarray, forKey: "SavedStringArray")

此代码将从数组中删除元素并在用户默认值中为相同的键再次设置数组,因此它将用新数组替换你的数组。

您可以为字符串类型的数组尝试此逻辑,即 [String]

    var arrStr:[String] = ["Cat","Rat","Mouse"]
    print(arrStr)

    let datastring = "Rat"
    if !arrStr.contains(datastring) {
        arrStr.append(datastring)
    } else {
        arrStr.remove(at: arrStr.index(of: datastring)!)
    }

    print(arrStr)
    UserDefaults.standard.set(arrStr, forKey: "SavedStringArray")
    UserDefaults.standard.synchronize()