분류 전체보기 56

[Alarm] #+1. 알람 편집 모드 구현

개발 일자 : 2022. 2. 2 이전에는 스와이프 액션을 통해 데이터가 삭제되도록 구현했었는데 왼쪽 상단 바 버튼을 편집 버튼으로 사용하기로 결정 이전 푸시 알람 테스트로 사용했던 액션 함수명과 왼쪽 바 버튼 아이템을 편집 버튼으로 변경함 또한 편집이 완료되면 완료 버튼을 누를 수 있도록 UIBarButtonItem 타입의 바 버튼을 선언했고 스토리보드에 편집 바 버튼을 outlet 으로 가져옴 이 때, 일반적인 경우와 달리 weak 가 아닌 strong 참조로 가져왔는데 이는 edit 버튼이 done 버튼으로 바뀌게 되었을 때 edit 버튼이 메모리에서 해제가 되어 재사용할 수 없게 되기 때문 done 버튼을 누르게 되면 셀렉터를 통해 didTapDoneButton 함수가 실행되고 이 때 done 버..

[Alarm] #-1. 사운드 옵션 화면 추가 및 선택한 알람 사운드 전달하기

개발 일자 : 2022. 1. 19 이건 좀 써둬야겠다고 생각이 드는 것이 한 번씩 있는데 요 알람 앱을 만들면서 좀 더 그런 생각이 많이 들었다 간단한 것들 중에서도 처음 해보는 방식이거나 생각해봐야 할 것들이 끊임없이 있더라 (느닷없이 왼쪽 엄지 손가락 관절이 아픈데,, 왜지) 암튼 생각 정리가 필요해서 오늘부터 적기 시작..! 이전 날짜도 중요한 건 적어둬야지 알람 사운드 옵션 화면 추가 스토리보드에 사운드 옵션 선택을 위한 화면(AlarmSoundVC) 추가 번외로 셀 선택했을 때 deselect 하는 코드를 tableView(didDeselectRowAt:) 메서드에 넣고 있었다는 걸 깨닫고 tableView(didSelectRowAt:) 메서드로 변경해줌 AlarmSoundVC 에 사운드 목록..

[Alarm] #. 설정한 시간에 알람이 울리도록 구현

개발 일자 : 2022. 1. 26 이전까지 구현한 것은 알람을 추가하거나 수정 및 삭제했을 때 선택한 시간 및 사운드 등을 포함한 알람 정보가 AlarmManager 에 적용되도록 하였다. 이제 해당 알람 정보를 토대로 실제로 notification 을 통한 알람이 울리도록 해야하는데, 이전에 AlarmListVC 에서 왼쪽 상단의 바 버튼을 눌렀을 때 ~초 후에 notification 이 오도록 구현했었는데 해당 코드를 AlarmManager 로 옮겨왔다. AlarmListVC 에 notification(UNUserNotificationCenter.current()) 프로퍼티가 있었는데 해당 프로퍼티도 AlarmManager 로 가져왔고 Notification 권한과 관련된 것은 해당 뷰컨트롤러가 로..

[프로그래머스] 최솟값 만들기

연습문제 최솟값 만들기 Level 2 문제 길이가 같은 배열 두 개가 주어짐 각각의 배열에서 하나씩 숫자를 뽑아 두 수를 곱함 이 과정을 배열의 길이만큼 반복하며 곱한 값을 누적하여 더할 때 최종 누적 값이 최소가 되도록 만들어야 함 이 때, 각각의 숫자는 한 번씩만 뽑을 수 있음 배열의 크기는 1000 이하 자연수 원소의 크기는 1000 이하 자연수 Idea 한 배열은 가장 작은 값부터, 다른 배열은 가장 큰 값부터 각각 곱해서 더하면 가장 작은 값이 나올 것 같음 하나는 오름차순, 다른 하나는 내림차순으로 정렬해서 반복문 사용해서 곱하여 누적하기 Code Swift 뭐지,, 처음에 효율성에서 두 개 시간초과 나길래 잉?? 아닌가 하고 찾아봤는데 다 나랑 똑같음 그래서 다시 돌렸더니 통과됨! impor..

[프로그래머스] 피보나치 수

연습문제 피보나치 수 Level 2 문제 2 이상의 n 이 주어졌을 때, n 번째 피보나치 수를 1234567로 나눈 나머지 구하기 Idea 반복문으로 피보나치 수 구하기 한 번 구한 값은 저장하기 Code Swift 재귀 방식은 시간 초과 및 core dump 에러 뜸 func solution(_ n: Int) -> Int { var fibonacci = [0, 1] for i in 2...n { let next = (fibonacci[i-1] + fibonacci[i-2]) % 1234567 fibonacci.append(next) } return fibonacci[n] } 다른 사람 풀이 배열에 저장하지 않고 하는 법 func solution(_ n: Int) -> Int { var n0 = 0, ..

[프로그래머스] 행렬의 곱셈

연습문제 행렬의 곱셈 Level 2 문제 두 개의 이차원 행렬이 주어질 때 arr1 에 arr2 를 곱한 결과 반환하기 행과 열의 길이는 2 이상 100 이하 각각의 원소는 -10 이상 20 이하 자연수 곱할 수 있는 배열만 주어짐 Idea arr1 의 행과 arr2 의 열을 각각 곱한 합이 새로운 원소가 됨 arr1 의 행 개수만큼 바깥 반복문을 돌고 arr2 의 열 개수만큼 안쪽 반복문을 돌고 arr1 의 열 개수 또는 arr2의 행 개수만큼 그 안쪽 반복문을 돌면서 arr1 의 행과 arr2 의 열을 곱해줌 arr1 의 행과 arr2 의 열의 원소를 각각 곱하여 합한 값이 새로운 행렬의 한 행의 하나의 원소가 됨 arr1 의 하나의 행에 대해서 arr2 의 모든 열을 위 작업을 하게 되면 새로운 행..

[프로그래머스] JadenCase 문자열 만들기

연습문제 JadenCase 문자열 만들기 Level 2 문제 JadenCase 란 모든 단어의 첫 문자가 대문자고, 그 외의 알파벳은 소문자인 문자열 문자열이 주어졌을 때 JadenCase 로 바꿔 리턴하기 알파벳과 공백으로 이루어져 있음 첫 문자가 영문이 아닌 경우는 뒤의 영문 모두 소문자 Idea 공백으로 구분해서 나누고 첫 글자를 확인해서 알파벳이면 대문자로 바꾸기 Code Swift 참고. word.capitalized 를 사용하면 처음 나오는 알파벳을 대문자로 바꿔주고 나머지 뒤의 알파벳은 소문자로 바꿔줌. 이 문제에서는 첫 글자가 알파벳이 아닌 경우 대문자로 변경하지 않기 때문에 사용할 수 없음 word.capitalized() 와는 다름!!! 주의. 공백이 여러 개 있는 경우도 고려해야 함..

[프로그래머스] N개의 최소공배수

연습문제 N개의 최소공배수 Level 2 문제 100 이하의 n 개의 자연수가 주어질 때 n 개의 수에 대한 최소공배수 구하기 예. [2,6,8,14] -> 4개의 수에 대한 최소 공배수 Idea 최소공배수 구하고 나온 최소공배수와 다음 수의 최소공배수 구하는 방식으로 반복적으로 구하기 Code Swift 고차함수 활용: reduce func lcm(_ a: Int, _ b: Int) -> Int { return (a * b) / gcd(a, b) } func gcd(_ a: Int, _ b: Int) -> Int { var num = [a, b].max()! var divisor = [a, b].min()! while num % divisor != 0 { let remainder = num % divi..

Hugging Priority vs. Compression Resistance Priority

Hugging Priority 와 Compression Resistance Priority 를 설명하기 앞서 Intrinsic Content Size 에 대해 가볍게 알고가자면... Intrinsic Content Size UI framework 에서 제공하는 일부 뷰에는 컨텐츠 고유 사이즈(Intrinsic Content Size)라는 개념이 있음 → 예. UILabel, UIButton 등 텍스트나 이미지 크기에 따라 크기가 결정되는 뷰 → 다른 뷰들 간에 걸린 제약에 의해 본래 Intrinsic Content Size 보다 줄어들거나 늘어나게 됨 → Label 의 leading / trailing 또는 width / height 등이 설정되지 않았는데도 에러가 발생하지 않음 → Label 안에 들어..

# iOS | Swift 2022.01.04

ViewController Life Cycle

■ VC 의 상태를 4 가지로 구분할 수 있다 Appearing : 뷰가 화면에 나타나고 있는 상태 Appeared : 뷰가 화면에 나타나는게 완료된 상태 Disappearing : 뷰가 화면에서 사라지고 있는 상태 Disappeared : 뷰가 화면에서 사라진 상태 ■ VC 의 흐름은 다음과 같다고 할 수 있다 viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidDisappear Life Cycle Method — Managing the View loadView() ■ 이 메소드를 절대 직접적으로 호출해서는 안됨 ■ 컨트롤러가 관리하는 뷰를 만드는 역할을 함 → 뷰를 만들고 메모리에 올리는 과정 ■ view 프로퍼티..

# iOS | Swift 2022.01.03