Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如果与上次存储的日期匹配,则启用按钮+;1._Swift_Nsdate - Fatal编程技术网

Swift 如果与上次存储的日期匹配,则启用按钮+;1.

Swift 如果与上次存储的日期匹配,则启用按钮+;1.,swift,nsdate,Swift,Nsdate,我对斯威夫特还不太熟悉,但越来越好 我成功地禁用了一个按钮并存储了日期。在这一点上,我已经到了知识的尽头,所以我希望有人能帮助我 然后,需要在第二天通过检查存储的日期来启用该按钮,因此用户每天只能使用该功能一次 代码如下: import Foundation import UIKit class tryForAFiver : UIViewController { @IBOutlet weak var drinkImage: UIImageView! @IBOutlet we

我对斯威夫特还不太熟悉,但越来越好

我成功地禁用了一个按钮并存储了日期。在这一点上,我已经到了知识的尽头,所以我希望有人能帮助我

然后,需要在第二天通过检查存储的日期来启用该按钮,因此用户每天只能使用该功能一次

代码如下:

import Foundation
import UIKit

class tryForAFiver : UIViewController {


    @IBOutlet weak var drinkImage: UIImageView!
    @IBOutlet weak var redeemButton: UIButton!

    override func viewDidLoad() {
        self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())



    }


    @IBAction func redeemButton(_ sender: Any) {

        let cocktailNumber = arc4random_uniform(32)
        drinkImage.image = UIImage(named: "cocktailList\(cocktailNumber)")

        let userDefaults = UserDefaults.standard

            if var timeList = userDefaults.object(forKey: "timeList") as? [NSDate]
            {
                timeList.append(NSDate())
                userDefaults.set(timeList, forKey: "timeList")
            }
            else
            {
                userDefaults.set([NSDate()], forKey: "timeList")
            }
            userDefaults.synchronize()

        if let timeList = UserDefaults.standard.object(forKey: "timeList") as? [NSDate]
        {
            print(timeList)
        }


       self.redeemButton.isEnabled = false

    }

}

提前感谢您的帮助。

我对您的代码做了一些更改。用
Date()
代替
NSDate()
可以吗?在Swift中更容易使用

按钮操作:

@IBAction func redeemButton(_ sender: Any) {

    let userDefaults = UserDefaults.standard

    if var timeList = userDefaults.object(forKey: "timeList") as? [Date]
    {
        timeList.append(Date())
        userDefaults.set(timeList, forKey: "timeList")
    }
    else
    {
        userDefaults.set([Date()], forKey: "timeList")
    }
    userDefaults.synchronize()

    if let timeList = UserDefaults.standard.object(forKey: "timeList") as? [Date]
    {
        print(timeList)
    }

    self.redeemButton.isEnabled = false
}
和在viewDidLoad()上


这会让你走上正轨。警告:UserDefaults()和Date()都不能安全地进行此类操作。这两种方法都很容易被客户修改。如果服务器检查很重要的话,你也应该进行服务器检查。

服务器检查是个好主意,但目前我还没有意识到这一点,你的修复程序正是我所需要的,非常感谢!很高兴我能帮忙。没关系,这是值得思考的:)。祝你好运UserDefaults有一个加载数组的特定方法。顺便说一句,你可以简化你的按钮代码
redemptionButton.isEnabled=!Calendar.current.isDateInToday(lastDay)
非常好的建议。我试图尽可能地说清楚。谢谢我到家后再编辑
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    if let timeList = UserDefaults.standard.object(forKey: "timeList") as? [Date], let lastDay = timeList.last
    {
        if Calendar.current.isDateInToday(lastDay) {
            self.redeemButton.isEnabled = false
        }
        else {
            self.redeemButton.isEnabled = true
        }
    }
}