일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SWIFT
- Refactoring
- 리펙토링
- 리펙터링
- 스위프트
- Human interface guide
- tableView
- Clean Code
- RxCocoa
- uitableview
- rxswift
- MVVM
- HIG
- Xcode
- collectionview
- uiscrollview
- Protocol
- ios
- ribs
- 리팩토링
- Observable
- swift documentation
- combine
- clean architecture
- swiftUI
- 애니메이션
- UITextView
- map
- UICollectionView
- 클린 코드
- Today
- Total
목록iOS 응용 (swift) (724)
김종권의 iOS 앱 개발 알아가기
프로퍼티를 assign한다는 의미 assign한다는 것은 아래처럼 특정 값을 변수에 대입한다는 의미 // a에 1을 assign하는 형태 let a = 1 assign되는 2가지 형태 primary type, struct와 같은 value type을 assign하는 경우 value type을 assign하게되면 a프로퍼티는 value type가 됨 // a에 1을 assign하는 형태 let a = 1 class와 같은 reference type을 assign하는 경우 reference type을 assign하게되면 해당 프로퍼티는 reference type이 됨 class C {} let c = C() reference type 주의사항 reference type이라는 의미를 주의할 것 아래와 같이 c..
scrollToRow UIScrollView에서 제공하는 scrollToRow(at:at:animated:)라는 메소드를 활용하여 scrollToTop, scrollToBottom과 같은 것을아래처럼 호출이 가능 tableView.scrollToRow(at: .init(row: 0, section: 0), at: .top, animated: true) 하지만 scrollToTop을 위해 위처럼 작성할 경우 IndexPath의 row값이 없는 경우 크래시가 발생 // terminating due to uncaught exception of type NSException tableView.scrollToRow(at: .init(row: 0, section: 0), at: .top, animated: true..
기초 지식) Throttle와 Debounce 개념 throttle을 10초로 걸어놓은 경우, 이벤트가 3번 발생했을 때 첫번째 이벤트만 10초후에 실행 debounce를 10초로 걸어놓은 경우, 이벤트가 3번 발생했을 때 마지막 이벤트가 발생하고 나서 10초후에 실행 (이벤트가 도중에 들어오면 또 10초 연장된 후 발행) 차이점? throttle은 무조건 10초안에 이벤트가 하나씩 발행되고, debounce는 10초가 지나기 전에 또 다른 이벤트가 들어오면 다시 10초 딜레이 후 마지막 이벤트를 실행 사용처 throttle: 버튼 탭 debounce: 검색 입력 Debounce 직접 구현해보기 Debouncer 클래스 선언 class Debouncer { } 일정 seconds 후에 실행되어야하므로 ..
기본지식 1) capture list 개념 closure = { [weak self] in // Void)? } 그래서 보통 위와 같은 전역변수가 아닌, 함수 or 메서드에 @escaping 키워드를 붙이는 것 func someFunc(_ closure: @escaping (Void) -> Void) { } 기본지식 3) [weak self]를 안써서 memory leak을 일으키는 코드 SomeClass의 setupClosure() 메서드를 보면 closure를 assign할 때 self를 집어넣음 -> retain cycle 발생 1) SomeClass 인스턴스가 closure 프로퍼티 참조 2) closure 프로퍼티가 SomeClass 인스턴스 참조 (이 부분이 클로저 안에서 self를 참조해서 ..
scrollViewDidEndDragging(_:willDecelerate:) 개념 scrollView의 델리게이트 메소드 스크롤하는 드래그가 종료되었을때 호출 스크롤이 종료되었을때 호출 decelerate값이 true이면 사용자가 스크롤을 놓을때 관성으로 놓아진것 (드래그를 떼고나서 서서히 멈추는 스크롤 됨) decelerate값이 false이면 사용자가 스크롤을 놓을때 관성없이 놓은것 (드래그를 떼고나서 바로 멈춤) extension ViewController: UITableViewDelegate { func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { print("decelerate>"..
layoutIfNeeded() 레이아웃 시스템을 업데이트하고 뷰의 크기와 위치를 조정 subview의 레이아웃을 즉시 업데이트 layoutIfNeeded() 동작 원리 a.layoutIfNeeded() 위와같이 호출하는 경우 뷰의 레이아웃 업데이트 범위? a뷰는 업데이트 안됨 a의 subview들만 업데이트됨 (공식 문서에서도 subviews들을 업데이트 한다고 명시) 주의사항 a뷰가 b뷰를 가지고 있을때, a.layoutIfNeeded()를 호출하면 b.layoutIfNeeded()가 호출되지 않음 a.layoutIfNeeded()를 호출해서 a뷰의 레이아웃이 업데이트되고 b입장에서 a뷰의 레이아웃이 업데이트 되었으므로 자동으로 업데이트 되는 것 autolayout 사용할 경우 superview에 따라..
Autolayout 동작 방식 Autolayout은 superview의 크기가 변경되면, constraints로 잡혀있는 값을 기준으로 본인의 크기를 적절하게 변화시키는 것 ex) 사용자가 iPhone을 회전하는 경우, superview인 window의 가로와 세로가 변경되므로 그 subview들은 모두 크기를 변화시킴 constraints로 위치와 크기에 관한 (x, y, width, height) 기준이 정해지면, superview가 변할때 언제든지 동적으로 변동이 가능 Autoresizing Mask 개념 bit mask를 사용 * bit mask: 2진수로 표현한 값이며, 0001은 width값, 0011은 height값 이렇게 값을 표현하는 방법 (enum형태) ex) 아래는 flexibleWi..
Type casting 일반적인 표현 String -> Double 가장 일반적인 방법 Double에 문자열을 집어넣는 방법 Double("1") 또는 extension String에 넣는 방법 extension String { var asDouble: Double? { Double(self) } } "1".asDouble Type casting 표현식 표현식을 정의해놓는 방법 let stringToDouble = Double.init as (String) -> Double? 동작 1) 인수가 (String)으로 삽입 2) 인수가 Double.init에 들어감 - Double(인수)형태로 초기화 3) 그 값을 리턴 print(stringToDouble("a")) // Optiona(nil) print(s..