| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 리펙토링
- 클린 코드
- tableView
- Observable
- ribs
- Xcode
- ios
- clean architecture
- Human interface guide
- map
- MVVM
- HIG
- swift documentation
- uiscrollview
- Clean Code
- combine
- Protocol
- swiftUI
- RxCocoa
- collectionview
- 리팩토링
- uitableview
- Refactoring
- UITextView
- UICollectionView
- SWIFT
- 스위프트
- 애니메이션
- rxswift
- scrollview
- Today
- Total
목록분류 전체보기 (1686)
김종권의 iOS 앱 개발 알아가기
새로운 `swiftly 버전 관리자`Linux상 Swift 도구 체인 관리를 관소화하기 위해 오픈 소스 커뮤니티에서 개발한 것 Swiftly는 macOS를 지원하며 swift.org에서 1.0 릴리즈 사용이 가능Swiftly 가이드 문서: https://www.swift.org/blog/introducing-swiftly_10/// 툴체인 설치swiftly install 6.1.3// 스냅샷 제공swiftly install main-snapshotXcode에서도 Toolchains 메뉴에서도 툴체인 사용 가능새로운 Swift lint설정 기능Swift Package Manager (SPM) 의 Package.swift 파일에서 아래처럼 swift lint 기능 사용이 가능treatAllWanings(as..
Alignment 파라미터 잘 활용하기보통은 HStack, VStack을 사용하면 alignment을 거의 안쓸 수가 있는데 이를 활용하면 여러가지 뷰를 조금 더 쉽게 표현이 가능HStack(alignment:)VStack(alignment:)먼저 alignment 타입 확인해보면, HStack은 VerticalAlignment 타입이고, VStack은 HorizontalAlignment 타입주의) "HStack은 수평이니 HorizontalAlignment"라고 잘못 생각하는 경우 주의alignment는 스택 방향과 반대 방향을 의미함// VStack 정의 형태@frozen public struct VStack : View where Content : View { @inlinable public i..
자식 뷰가 그려지는 원리일반적으로 뷰가 그려질때 부모 뷰 안에 자식 뷰가 있을때, 자식 뷰는 부모 뷰의 크기에 맞추어서 compression됨HStack이나 VStack안에 뷰를 넣고 이 뷰들의 콘텐츠가 길어질 때 아무리 길어도, 부모 뷰가 compression하려는 성질이 강해서 줄어들거나 말줄임표가 들어감ex) 문자열이 아무리 길어도 부모 뷰 안에 있으면 부모 뷰의 크기에 맞게 compression됨struct ContentView: View { var body: some View { ListExample() }}struct ListExample: View { var body: some View { List { ForEach(0..만약에 부..
제네릭과 프로토콜제네릭컴파일 타임에 타입이 정의되므로 타입 안정성이 있고 성능이 높음(static dispatch)DI(Dependency Injection)에 취약함struct UserService { var items: [T] func firstItem() -> T? { return items.first }}프로토콜DI(Dependency Injection)에 유리함 (관련 글)dynamic dispatch이므로 성능이 안좋음struct UserService { var items: [UserRepresentable] func firstItem() -> UserRepresentable? { items.first }}static dispatch, ..
padding에 nil 할당의 의미padding을 설정할때는 nil이나 Double값을 할당 할 수 있는데, 차이가 존재padding에 nil을 할당하면 padding()과 같이 시스템에서 알아서 정해주는 default padding으로 세팅됨padding에 0을 할당하면 의미 그대로 여백을 주지 않는다는 의미그렇다면 뷰에 padding을 안썼을때 적용되는 것은?padding에 0을 할당한것과 동일주의) padding에 nil을 할당하면 padding을 안썼을때와 다르게, 시스템에서 알아서 정해주는 세팅이 되므로 주의할 것예시UI에서 토글을 누를때마다 padding 적용 여부를 보고 싶기 때문에 아래와 같은 if함수 정의extension View { @ViewBuilder func `if`( ..
중첩 case 커피를 구분하는 switch-case문이 있을때, associated value에 다른 타입이 있는 경우enum BeverageType { case coffee(coffeeType: CoffeeType)}enum CoffeeType { case latte}enum OrderInfo { case specialOrder(customerName: String, drink: BeverageType)}let order1: OrderInfo = .specialOrder(customerName: "jake", drink: .coffee(coffeeType: .latte))이것을 사용하는 주문 쪽에서는 타입이 여러개이므로 switch-case에서 아래처럼 여러 단계를 가져갈 수 있음Ord..
밀집된 코드와 분리된 코드코드 관점에서 밀집된 코드와 분리된 코드가 있는데 가끔 어떤 방식으로 코드를 구현해야하는지 고민이 될 때가 있음 cf) 응집도와 결합도: 흔히 알려진 개념인 응집도와 결합도는 모듈을 기준으로 한 모듈이 다른 모듈을 많이 의존한다면 결합도가 크고 응집도가 낮다고 함모듈 관점에서는 코드를 작성할때 모듈간에 최대한 모르게끔 하는 명확한 방법이 존재하지만, 모듈 내부에서 코드를 작성해나갈때 최대한 함수로 작성할지, 아니면 함수 없이 한곳에 작성할지 고민이 되는 경우가 있음ex) VC가 로드될때 로딩을 돌리고, 카페 이름을 가져와서 뷰에 반영한 후 로딩을 멈추는 코드1. 하나의 함수에 모든 과업 다 넣기func viewDidLoad() { super.viewDidLoad() loa..
데이터 넘기기A -> B -> C로 msg 라는 String 형태의 데이터를 넘겨야하는 상황일 때 아래처럼 구현이 가능단, C에서만 msg데이터가 필요한 상태class AViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } @IBAction func goToB(_ sender: UIButton) { let bVC = BViewController(msg: "Hello from A") navigationController?.pushViewController(bVC, animated: true) }}class BViewController: UIView..