기능
- 현재시각(년도, 달, 일, 시간, 요일)을 표시해주는 레이블
- 데이트 피커를 통해 날짜와 시간을 선택할 수 있도록 한다.
- 데이트 피커로 선택한 날짜를 레이블로 나타낸다
- 현재 시간과 선택 시간이 같아지면 경고창을 띄운다.
코드
import UIKit
class ViewController: UIViewController {
let timeSelector : Selector = #selector(ViewController.updateTime)
let interval = 1.0
var count = 0
var alarmTime: String = ""
@IBOutlet var currentTimeLabel: UILabel!
@IBOutlet var datePickerLabel: UILabel!
@IBOutlet var datePickerView: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
Timer.scheduledTimer(timeInterval: interval, target: self, selector: timeSelector, userInfo: nil, repeats: true)
}
@IBAction func changeDatePicker(_ sender: UIDatePicker) {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm EEE"
datePickerLabel.text = "선택시간 : " + formatter.string(from: sender.date)
formatter.dateFormat = "hh:mm aaa"
alarmTime = formatter.string(from: datePickerView.date)
}
@objc func updateTime(){
let date = NSDate()
let formatter: DateFormatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm EEE"
currentTimeLabel.text = "현재시각 : " + formatter.string(from: date as Date)
formatter.dateFormat = "hh:mm aaa"
let currentTime = formatter.string(from: date as Date)
if(currentTime == alarmTime)
{
let alert = UIAlertController(title: "알림", message: "설정하신 시간입니다.", preferredStyle: .alert)
let action = UIAlertAction(title: "네, 알겠습니다.", style: .default)
alert.addAction(action)
present(alert, animated: true, completion: nil)
}else{
view.backgroundColor = .white
}
}
}
Selector
로 현재시각을 구하는 함수를 받는다.
- 이때 현재 시간을 구하는 함수는
NSDate()
를 통해 현재시각을 초단위로 받아온다.
DateFormatter
클래스를 통해 시간의 데이터 포맷을 지정한다.
- 데이터 포맷 변수에
string()
함수를 이용하여 지정한 데이터 형식을 String 데이터 타입으로 받아온다. (현재시각 불러오는 기능 구현 끝
Time
의 Scheduled()
메소드로 시간 간격을 전달하고, target은 뷰 컨트롤러로 하도록 하여 뷰컨트롤러가 전달한 시간 간격마다 시간 객체라 set되도록 한다. 셀렉터에는 현재 시간을 갱신하기 위해 만든 셀렉터 함수를 전달한다.
- 이때 셀렉터 함수는
@objc
속성을 부여해야한다.
- 마찬가지로 데이터 포맷 클래스의
string()
메소드에 데이터 피커객체의 date 을 전달하여 레이블에 표현한다.