จับคู่ datePicker วันที่และตัวจับเวลากับผู้ใช้วันที่และเวลา (swift3)

รหัสของฉันด้านล่างสร้างตัวเลือกวันที่และให้เลือกวันที่และเวลา ทั้งหมดที่ฉันต้องการทำคือเมื่อวันที่และเวลาของตัวเลือกวันที่ตรงกับวันที่และเวลาของโทรศัพท์ของผู้ใช้คือพิมพ์บรรทัด "เจ๋ง" แค่นั้นแหละ. ฉันแสดงความคิดเห็นบรรทัดที่ทำให้เกิดปัญหา

import UIKit

var dateFormatter : DateFormatter!

let datePicker2 = UIDatePicker();
let date = Date()

class ViewController: UIViewController {

    @IBOutlet var dateLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()

        let datePicker : UIDatePicker = UIDatePicker(frame: CGRect(x: 0,y: 330,width: self.view.frame.size.width,height: 220))
        datePicker.datePickerMode = UIDatePickerMode.dateAndTime
        self.view.addSubview(datePicker)

        datePicker.addTarget(self, action: #selector(ViewController.change(_:)), for: UIControlEvents.valueChanged)

        dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "YYYY-MM-dd hh:mm"
    }

    @IBAction func change(_ sender : UIDatePicker)
    {
        dateLabel.text = dateFormatter.string(from: sender.date)
        ///print cool line; what I have does not work
        if dateLabel.text == String(describing: date){
            print("cool")

        }
    }
}

person Community    schedule 14.07.2017    source แหล่งที่มา
comment
เหตุใด datePicker2 และ date จึงถูกประกาศนอกชั้นเรียนแทนที่จะอยู่ในชั้นเรียน   -  person rmaddy    schedule 14.07.2017
comment
และรูปแบบวันที่ของคุณควรเป็น "yyyy-MM-dd HH:mm"   -  person rmaddy    schedule 14.07.2017
comment
@rmaddy ไม่ทราบว่า datePicker2 และ date ควรอยู่ในชั้นเรียน   -  person    schedule 14.07.2017


คำตอบ (1)


ปัญหาหลักของคุณคือวิธีเปรียบเทียบวันที่ทั้งสอง คุณควรใช้ตัวจัดรูปแบบวันที่เดียวกันในการแปลงอินสแตนซ์ Date ทั้งสองเป็นสตริงในรูปแบบเดียวกัน จากนั้นคุณสามารถเปรียบเทียบทั้งสองสายได้

@IBAction func change(_ sender : UIDatePicker)
{
    let pickerString = dateFormatter.string(from: sender.date)
    let nowString = dateFormatter.string(from: Date())

    dateLabel.text = pickerString
    if pickerString == nowString {
        print("cool")
    }
}

คุณยังใช้รูปแบบที่ไม่ถูกต้อง คุณต้องการ "yyyy-MM-dd HH:mm" YYYY แตกต่างออกไปเล็กน้อย คุณต้องการ yyyy เสมอ เว้นแต่ว่าคุณมีความต้องการที่ชัดเจนและชัดเจนในการใช้ YYYY และสำหรับชั่วโมงที่คุณต้องการ HH แทนที่จะเป็น hh HH คือชั่วโมงแบบ 24 ชั่วโมง ในขณะที่ hh คือชั่วโมงแบบ 12 ชั่วโมง ใช้เพียง hh เท่านั้น คุณยังใช้ a อีกด้วย (สำหรับ AM/PM)

และคุณสมบัติของคุณควรอยู่ภายในชั้นเรียน ไม่ใช่ภายนอก

ย้าย datePicker2 ภายในชั้นเรียน

date ล้าสมัยแล้วตามคำตอบของฉัน ดังนั้นคุณสามารถลบออกได้ทั้งหมด

dateFormatter ควรถูกย้ายภายในชั้นเรียนด้วย

person rmaddy    schedule 14.07.2017
comment
ใช้งานได้หากคุณย้าย datePicker ไปเป็นเวลาปัจจุบัน แต่ถ้าคุณตั้งค่า datePicker เป็นเวลาและเมื่อเวลาปัจจุบันตรงกับ datePicker จะไม่มีอะไรเกิดขึ้น ฉันกำลังพยายามส่งสัญญาณเตือน ดังนั้นฉันจึงต้องการตั้งค่า datePicker และให้พิมพ์บางอย่างเมื่อตรงกับวันที่และเวลาปัจจุบัน - person ; 14.07.2017
comment
นั่นเป็นฟังก์ชันการทำงานที่แยกจากกันโดยสิ้นเชิง และจะต้องมีคำถามใหม่ทั้งหมด คำถามที่คุณถามข้างต้นคือวิธีการพิมพ์ cool เมื่อผู้ใช้เปลี่ยนตัวเลือกเป็นเวลาปัจจุบัน คำถามนั้นได้รับคำตอบแล้ว หากคุณมีคำถามอื่นๆ ทั้งหมดเกี่ยวกับการตั้งค่าการเตือน และทราบว่าวันที่/เวลาปัจจุบันตรงกับวันที่/เวลาที่ผู้ใช้เลือกไว้ก่อนหน้านี้ คุณควรโพสต์คำถามใหม่พร้อมรายละเอียดที่เกี่ยวข้องทั้งหมดเกี่ยวกับปัญหานั้น - person rmaddy; 14.07.2017