在 Swift 3 中删除 UserDefaults 的单个键值

Posted

技术标签:

【中文标题】在 Swift 3 中删除 UserDefaults 的单个键值【英文标题】:Removing a single key value of UserDefaults in Swift 3 【发布时间】:2018-03-29 05:20:36 【问题描述】:

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

现在,我想允许用户在选择一行时从键中删除匹配的键值。如果单元格显示“第 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()
        

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

如果我打印UserDefaults.standard,它将返回存储的剧集值列表,例如`[“First Episode”、“Second Episode”、“Third Episode”]

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

【问题讨论】:

removeObject() 只有一个参数,即键。 只使用 defaults.removeObject(forKey: "SavedStringArray") @iMHitesh:现在正在尝试,但现在似乎没有删除任何内容。 没错——包含在上面的代码中。请注意,我使用的是UserDefaults,因为这是 Swift 3。 您无需致电synchronize。您需要将更新后的数组保存在 userdefaults 中,它会覆盖之前的值。您无需从 userdefaults 中删除任何内容 【参考方案1】:

我有以下代码可以为你工作。

if myarray.contains(datastring) 
    myarray.remove(at: myarray.index(of: datastring)!)
 else 
    myarray.append(datastring)

defaults.set(myarray, forKey: "SavedStringArray")

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

【讨论】:

完美运行。感谢您的洞察力。 @darkginger,我的快乐。很高兴为您提供帮助。【参考方案2】:

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

if !myarray.contains(datastring) 
    myarray.append(datastring)
 else 
    myarray = myarray.filter$0 != datastring

defaults.set(myarray, forKey: "SavedStringArray")

【讨论】:

现在尝试,但 Xcode 标记:Value of type '[String]' has no member 'removeObject' 表示 myarray.removeObject(datastring) 不需要调用同步【参考方案3】:

您可以尝试对 String 类型的数组使用此逻辑,即 [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()

【讨论】:

以上是关于在 Swift 3 中删除 UserDefaults 的单个键值的主要内容,如果未能解决你的问题,请参考以下文章

将值附加到数据数组并保存在 Userdefault swift

如何在 Swift 中将 JSON 数据保存到 UserDefault? [复制]

swift Userdefault标准保存/加载

在 Swift 中持久存储大量数据

如何在 Swift 的一个部分中删除行中的用户默认数据?

删除 UserDefault 中的套件