简体   繁体   English

仅从 Swift 的 UserDefaults 中的 int 数组中删除特定的 int 值

[英]Delete only specific int values from int array in UserDefaults in Swift

I made a like button on a book page.我在书页上做了一个点like按钮。 When I press a like button, the image of the button changes.当我按下一个like按钮时,按钮的图像会发生变化。 The page number is stored in an Int Array in UserDefaults.页码存储在 UserDefaults 中的 Int 数组中。

But when I cancelled the like, page numbers stored in Int Array UserDefaults should be deleted.但是当我取消喜欢时,应该删除存储在 Int Array UserDefaults 中的页码。

How can I delete a specific number inside an Int Array in UserDefaults?如何在 UserDefaults 中删除 Int 数组中的特定数字?

@objc func likeBtnClicked(_ sender: UIButton) {
        DispatchQueue.main.async {
            if sender.isSelected == false {
                sender.setBackgroundImage(UIImage(named: "fill-heart"), for: .normal)

                UserDefaults.standard.set(self.bookPage, forKey: "\(self.bookNo ?? "")")

self.likePageArr.append(UserDefaults.standard.object(forKey: "\(self.bookNo ?? "")") as! Int)

                var likePageArray = UserDefaults.standard.array(forKey: "\(self.bookNo ?? "")Arr") as? [Int] ?? [Int]()

                    UserDefaults.standard.set(self.likePageArr, forKey: "\(self.bookNo ?? "")Arr")

                sender.isSelected = true

            } else if sender.isSelected == true {
                sender.setBackgroundImage(UIImage(named: "none-heart"), for: .normal)
                UserDefaults.standard.removeObject(forKey: "\(self.bookNo ?? "")")

                var likePageArray = UserDefaults.standard.array(forKey: "\(self.bookNo ?? "")Arr") as? [Int] ?? [Int]()

                likePageArray.remove(at: likePageArray.index(of: self.bookPage) ?? 0)

//i need delete self.bookPage in likePageArray

                sender.isSelected = false
            }
        }

You have already removed the value from the array here:您已经在此处从数组中删除了该值:

likePageArray.remove(at: likePageArray.index(of: self.bookPage) ?? 0)

Now, you just need to re-write the array back to UserDefaults (like you did before):现在,您只需要将数组重新写入UserDefaults (就像您之前所做的那样):

UserDefaults.standard.set(self.likePageArr, forKey: "\(self.bookNo ?? "")Arr")

You cannot update specific value inside array in UserDefaults.您无法更新 UserDefaults 中数组内的特定值。 Firstly, you need to get specific object from UserDefaults and store in one variable, make required changes in that variable and save that variable in UserDefaults.首先,您需要从 UserDefaults 中获取特定的 object 并将其存储在一个变量中,对该变量进行必要的更改并将该变量保存在 UserDefaults 中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM