일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- swiftUI
- tableView
- UICollectionView
- 애니메이션
- HIG
- ios
- uitableview
- 클린 코드
- Xcode
- ribs
- Refactoring
- 리펙터링
- collectionview
- swift documentation
- MVVM
- combine
- map
- uiscrollview
- RxCocoa
- UITextView
- clean architecture
- 리팩토링
- Observable
- Human interface guide
- 리펙토링
- 스위프트
- Clean Code
- rxswift
- Protocol
- Today
- Total
목록분류 전체보기 (1638)
김종권의 iOS 앱 개발 알아가기
Xcode에서 시뮬레이터가 보이지 않을 때Xcode에서 다른 버전 혹은 다른 시뮬레이터를 설치했는데, 목록에 보이지 않는 경우가 존재기기 보이게 하는 방법디바이스의 iOS버전에 맞게 Minimum Deployments가 낮게 설정되었는지 확인Minimum Deployments을 iOS 17에서 iOS 14로 낮추니 여러가지 디바이스가 등장하지만 아직 원하는 iPhone SE1기기가 보이지 않음"Manage Run Destinations..." 클릭시뮬레이터 탭에도 iPhone SE1이 보이지 않음+ 버튼을 눌러서 추가만약 아래처럼 "could not create iPhone SE..."가 나오면 시뮬레이터를 설치해야함시뮬레이터 설치 방법"CMD + ," 단축키 > Platforms 탭 클릭 > 좌측 하단..
StackView sv LazyStackViewStackView, LazyStackView 모두 ScrollView와 같이 사용하여 리스트형 UI 구현이 가능// 1ScrollView(.horizontal) { HStack { ProfileView() ProfileView() ProfileView() ProfileView() ProfileView() }}.frame(maxWidth: 500)// 2ScrollView(.horizontal) { LazyHStack { ProfileView() ProfileView() ProfileView() ProfileView() ..
generic과 opaque type 개념generic은 타입의 유연성을 제공하여 사용하는쪽에서 타입을 정하게끔하는 방법ex) generic을 사용하는 가장 대표적인 예제 - Stack 구현struct Stack { private var elements: [Element] = [] mutating func push(_ element: Element) { elements.append(element) } mutating func pop() -> Element? { elements.popLast() } func peek() -> Element? { elements.last } func isEmpty()..
문자열 bullet 기준 들여쓰기 UIbullet기준으로 텍스트들이 들여쓰기 되어있는 UI폰트가 큰 경우에도 들여쓰기 기준 동일)let text = """• 첫 번째 텍스트 이빈다. 이것은 bullet 테스트, 과연 긴 텍스트가 있을 때 indent가 어떻게 적용될 것인가 테스트 해봅니다. iOS 앱 블로그 알아가기 jake에서 살펴봅니다.• 두 번째 텍스트 입니다."""문자열 bullet 기준 들여쓰기 구현 아이디어뷰와 UILabel 준비import UIKitclass ViewController: UIViewController { private let label = { let l = UILabel() l.font = .systemFont(ofSize: 30) ..
UITableView 데이터 추가하기UITableView에서 스크롤하면서 동시에 아래에 데이터를 계속해서 추가해주어야하는 페이지네이션 UI가 존재페이지네이션 UI 구현 방법은 이전 포스팅 글 참고 [iOS - swift] UITableView 하단 로딩 구현 방법 (#페이지네이션, footer loading, UIActivityIndicatorView)하단 로딩 구현 아이디어1단계) Pagination: tableView의 willDisplay 델리게이트에서 마지막 인덱스 값인지 체크하고, 마지막 인덱스 값이면 페이지네이션 구현2단계) 하단로딩: willDisplay에서 페이지네이ios-development.tistory.comex) 페이징 관련 코드마지막 셀이 보여질 때 로딩 뷰, footerView를..
struct, class 메모리 저장 위치strucrt는 보통 메모리에서 stack영역에, class는 heap영역이 저장되는데, 아래처럼 struct안에 class 타입이 있을때 이것은 어디에 저장될 것인가?class SomeClass { var value: Int init(value: Int) { self.value = value }}struct SomeStruct { var classInstance: SomeClass var otherValue: Int}결론은 SomeStruct는 stack영역에 저장되고, SomeStruct의 class타입인 프로퍼티 classInstance는 heap영역에 저장됨메모리 위치 알아내기swift에서 heap과 stack영역의 ..
결합 연산자2차원 배열을 1차원 배열로 만들 때, 3가지의 연산자 사용이 가능var a = [[1, 2], [3], [4, 5]]let a_1 = a.flatMap { $0 }let a_2 = a.reduce([], +)let a_3 = Array(a.joined())// [1, 2, 3, 4, 5]하지만 여기서 reduce 연산자를 사용하면 O(n^2)의 비용이 들고 flatMap, joined를 사용하면 O(n) 비용이 들기때문에 reduce를 지양할 것reduce를 사용했을때 O(n^2) 비용이 드는 이유3*3 배열일때 예시var b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]초기 상태 = []첫번째 배열 순회하면서 append: [[1, 2, 3]]누적 연산 카운트: 3두번째 ..
* Synthetic Sugar: 결과는 같지만, 코드를 조금 더 단순하게 표현하는 것Optional 타입에 map 사용하기보통 map 함수를 배열과 같은곳에 원소를 하나씩 돌면서 변화를 줄 때 사용let items = [1,2,3,4,5]let itemsWithPlusOne = items.map { $0 + 1 }하지만 Optional 타입에도 map을 사용이 가능Swift 코드를 보면 Optional에 map 함수가 정의Optional인 타입의 메소드이며, 이 map을 사용하면 Optional을 벗겨낸 값을 map의 클로저로 전달한 인수로 들어가는 것@frozen public enum Optional : ExpressibleByNilLiteral { @inlinable public func ma..