Ketika saya menjalankan program ini dan mengisi kolom DOB dengan tanggal lahir saya, itu tidak mengisi "ageLabel" sebagaimana mestinya. Tapi itu akan dicetak ketika saya menyertakan pernyataan cetak. Jika saya tidak menyertakan pernyataan cetak, saya mendapat peringatan:

"Inisialisasi nilai 'ageLabel' yang tidak dapat diubah tidak pernah digunakan; pertimbangkan untuk mengganti dengan penetapan ke '_' atau menghapusnya"

Apa yang saya lewatkan?

class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var name: UITextField!
    @IBOutlet weak var DOB: UITextField!
    @IBOutlet weak var DOR: UITextField!
    @IBOutlet weak var currentDate: UIDatePicker!
    @IBOutlet weak var ageLabel: UILabel!

    @IBAction func calculateButton(_ sender: Any) {
        let textInput = DOB.text
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MM/YYYY"
        let startDate = dateFormatter.date(from: textInput!)
        let currentDate = Date()
        let gregorian = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)!
        let ageLabel = gregorian.components([.month, .year], from: startDate!, to: currentDate)

        print (ageLabel)
    }
}
-1
Drewgost 12 November 2017, 20:45

1 menjawab

Jawaban Terbaik

Anda memiliki outlet bernama ageLabel yang muncul di label yang ingin Anda perbarui.

Dalam metode calculateButton Anda, Anda memiliki variabel lokal bernama ageLabel yang sebenarnya merupakan hasil DateComponents yang tidak Anda gunakan.

Anda tidak berusaha memperbarui label yang sebenarnya dengan usia yang dihitung.

Anda juga menggunakan NSCalendar alih-alih Calendar. Dan format tanggal Anda salah menggunakan YYYY alih-alih yyyy untuk tahun tersebut.

Anda juga menganggap pengguna benar-benar memasukkan string dalam format yang sangat spesifik dari tahun garis miring bulan. Jika pengguna memasukkan hal lain, aplikasi Anda akan mogok.

Ini adalah versi tetap dari kode Anda:

@IBAction func calculateButton(_ sender: Any) {
    let textInput = DOB.text!
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MM/yyyy"
    if let startDate = dateFormatter.date(from: textInput) {
        let currentDate = Date()
        let ageComponents = Calendar.current.dateComponents([.month, .year], from: startDate, to: currentDate)
        ageLabel.text = "\(ageComponents.year!)"
    } else {
        ageLabel.text = ""
    }
}

Saya hanya menunjukkan usia dalam tahun. Anda juga dapat menunjukkan bulan jika Anda mau.

Lebih baik lagi, gunakan DateComponentsFormatter untuk menunjukkan usia.

1
rmaddy 12 November 2017, 17:56