오늘한 일
- 노션 iOS DB를 작성하였다
- 앨런 Swift문법 마스터 스쿨 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) 강의를 수강하였다
- 알고리즘 문제를 풀었다
- 블로그 TIL을 작성하였다
- 1일 1커밋을 하였다
느낌 점
오늘 타이머 앱을 구현하면서 저번에 배운 MVC 패턴으로 구현하려고 고집을 부리다가 오히려 코드가 더 길어지며 복잡해지고 예상치 않은 문제가 생기는 등 디자인 패턴에 이점을 살리지 못하는 것을 느끼면서 무조건적으로 디자인 패턴을 사용하려고 하는 것은 지양 해야겠다는 생각이 들었다
배운 점
Swift 일정 시간 코드 지연 실행
1
2
3
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
// 코드
}
타이머 앱을 구현하던 중 일정 시간 이후 코드를 실행하면 되겠다는 해당 논리를 떠올려서 해당 로직을 구현하는 법을 찾다가 알게 되었다
시스템 기본 오디오 출력
1
2
3
import AVFoundation
AudioServicesPlayAlertSound(SystemSoundID(1322))
아이폰 기본 사운드를 재생하는 법에 대해 찾다가 해당 방법을 알게 되었다 SystemSoundID에 사운드 정보는 여기에서 찾을 수 있었다
일정 시간마다 반복
1
2
3
4
5
6
weak var timer: Timer?
timer?.invalidate()
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { [self] _ in
// 코드
})
타이머 앱을 구현하던 중 생각한 첫번 째 로직을 쓰는 것보다 더 좋은 로직인 것 같아 사용하게 되었다
1
timer?.invalidate()
위 코드로는 타이머를 종료할 수 있다
UI 텍스트 필드 코드
1
2
3
4
5
6
7
8
9
10
let textField: UITextField = {
let tf = UITextField()
tf.keyboardType = UIKeyboardType.emailAddress
tf.placeholder = "이메일 입력"
tf.borderStyle = .roundedRect
tf.clearButtonMode = .always
tf.returnKeyType = .done
return tf
}()
스토리보드로만 구현했던 UI 텍스트 필드를 코드로 구현하는 법에 대해 알게 되었다
내일 계획
내일은 앨런 Swift문법 마스터 스쿨 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) 강의에서 최소 9번 째 앱까지는 복습하고 노션에 정리를 할 것이다