라면 타이머 앱

내가 작성한 라면 타이머 코드는 다음과 같다

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var timerButton: UIButton!
@IBOutlet weak var segment: UISegmentedControl!

var secondsLeft: Int = 180
var timer: Timer?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    timerButton.layer.cornerRadius = 10
    

}
func resetTimer() {
    timer?.invalidate()
    timer = nil
    timerButton.setTitle("타이머 시작하기", for: .normal)
}

func updateTimerLabel(){
    var minutes = self.secondsLeft / 60
    var seconds = self.secondsLeft % 60
    
    if self.secondsLeft < 11 {
        self.timerLabel.textColor = UIColor.red
    } else {
        self.timerLabel.textColor = UIColor.black
    }
    UIView.transition(with: self.timerLabel, duration: 0.3, options: .transitionFlipFromBottom) {
        if self.secondsLeft > 0{
            self.timerLabel.text = String(format: "%02d:%02d",minutes, seconds)
        } else{
            self.timerLabel.text = "시간 끝!"
        }
    } completion: { (animated)  in
        
    }

    
    
}

@IBAction func segmentValueChanged(_ sender: Any) {
    if segment.selectedSegmentIndex == 0 {
        
        self.secondsLeft = 180
        self.updateTimerLabel()
        resetTimer()
        return
    
    } else if segment.selectedSegmentIndex == 1{
        self.secondsLeft = 240
        self.updateTimerLabel()
        resetTimer()
        return
    } else{
        self.secondsLeft = 300
        self.updateTimerLabel()
        resetTimer()
        return
    }
    
    
}
@IBAction func timerButtonClicked(_ sender: Any) {
    

    
    self.timerButton.setTitle("타이머 종료하기", for: .normal)
    self.secondsLeft -= 1
    self.updateTimerLabel()
    
    
    timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { t in
        self.secondsLeft -= 1
        self.updateTimerLabel()
        
        if self.secondsLeft == 0{
            self.resetTimer()
        }

    }
}

}

다른 사람이 작성한 코드는 다음과 같다.

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var timerButton: UIButton!
@IBOutlet weak var segment: UISegmentedControl!

var secondsLeft: Int = 180
var timer: Timer?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    timerButton.layer.cornerRadius = 10
    
    self.updateTimeLeft()
}

func resetTimer() {
    timer?.invalidate()
    timer = nil
    timerButton.setTitle("타이머 시작하기", for: .normal)
}

func updateTimerLabel() {
    var minutes = self.secondsLeft / 60
    var seconds = self.secondsLeft % 60
    
    if self.secondsLeft < 10 {
        self.timerLabel.textColor = UIColor.red
    } else {
        self.timerLabel.textColor = UIColor.black
    }
    
    
    UIView.transition(with: self.timerLabel, duration: 0.3, options: .transitionFlipFromBottom) {
        if self.secondsLeft > 0 {
            self.timerLabel.text = String(format: "%02d:%02d", minutes, seconds)
        } else {
            self.timerLabel.text = "시간 끝!"
        }
    } completion: { (animated) in
        
    }
}

func updateTimeLeft() {
    self.secondsLeft = 180 + segment.selectedSegmentIndex * 60
    self.updateTimerLabel()
}

@IBAction func segmentValueChanged(_ sender: Any) {
    self.resetTimer()
    self.updateTimeLeft()
}

@IBAction func timerButtonClicked(_ sender: Any) {
    if timer != nil {
        resetTimer()
        return
    }
    
    self.timerButton.setTitle("타이머 종료하기", for: .normal)
    self.updateTimeLeft()
    
    
    timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (t) in
        self.secondsLeft -= 1
        self.updateTimerLabel()
        
        if self.secondsLeft == 0 {
            self.resetTimer()
        }
    }
}

}

정리하자면, 나는 if문을 사용하여 segment.selectedSegmentIndex가 0,1,2인 경우에 따라서 표시되는 시간을 다르게 하였다.
하지만 다른 사람이 작성한 코드를 보면 3분을 기준으로 segment.selectedSegmentIndex의 값에다가 60을 곱하여 상황에 맞추어 변화시켜주는 updateTimeLeft()함수를 만들고 표시되는 시간을 초기화 해주는 resetTimer()함수와 함께 segmentValueChanged(_ sender: Any) 함수에 안에 포함시켜 segment의 값이 변할 때 마다 시간을 초기화해 주었다.

비교를 해보았을 때, 다른 사람이 작성한 코드가 더 깔끔하고, 따로 함수로 만들어주었기 때문에 사용가능성 측면에서도 괜찮은 것 같다.

따라서 앞으로 기능을 구현할 때 더 객체화하는 쪽으로 연습을 해야겠다.

좋은 웹페이지 즐겨찾기