[Do it!] 알람 시계 앱 (얼럿 버전)

CoCoral·2023년 8월 23일
0

Do it!

목록 보기
9/25

Do it! 스위프트로 아이폰 앱 만들기
06장 도전! Misson 알람 시계 만들기

📱 실행 화면 📱


💻 소스 코드 작성하기

* 알람 시계 앱 이전 버전에서 코드 추가하기

class ViewController: UIViewController {
    let timeSelector: Selector = #selector(ViewController.updateTime)
    let interval = 1.0
    
    var alarmTime: String?
    
    //추가 코드
    var isCheck = false
  • isCheck 를 통해 팝업 창이 한 번만 뜨도록 한다.

@objc func updateTime() {
        let date = Date()
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss EEE"
        lblCurrentTime.text = "현재시간: " + formatter.string(from: date)
        
        formatter.dateFormat = "yyyy-MM-dd HH:mm"
        let currentTime = formatter.string(from: date)
        
        //추가 코드
        if alarmTime == currentTime {
            if !isCheck {
                let alarmAlert = UIAlertController(title: "알림", message: "설정된 시간입니다 !!!", preferredStyle: UIAlertController.Style.alert)
                let yesAction = UIAlertAction(title: "네, 알겠습니다.", style: UIAlertAction.Style.default, handler: nil)
                alarmAlert.addAction(yesAction)
                present(alarmAlert, animated: true, completion: nil)
                isCheck = true
            }
        }
        else { isCheck = false }
    }
  • isCheck == false 일 때만 팝업 창 띄우기
    - UIAlertController 생성하기
    - UIAlertAction 생성하기
    - alarmAlert 에 yesAction 추가하기
    - 팝업 창 띄우기
    - isCheck = false 설정하기
  • 시간이 다를 때는 isCheck = false 설정하기

🤔 Hmm...

[네, 알겠습니다.] 를 누르면 1분 동안 알림 창 나타나지 않게 설정해보라고 해서 처음에는 yesAction의 handler에 isCheck = true 코드를 넣었었다.
실행해보니 팝업 창이 중복으로 뜨는 문제가 발생했다.
챗 gpt 한테 물어보니 버튼을 누르는 것보다 updateTime() 메소드 호출 시점이 더 빠르면 팝업이 중복으로 뜰 수 있다는 것이었다.
그래서 그냥 handler 는 nil 로 설정하고 present 직후에 isCheck = true 를 실행하게 하니 문제가 해결되었다.

profile
언젠간 iOS 개발자가 되겠지

0개의 댓글