| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- ribs
- RxCocoa
- UICollectionView
- 리펙토링
- Clean Code
- Protocol
- Human interface guide
- tableView
- Xcode
- map
- uitableview
- 애니메이션
- swiftUI
- SWIFT
- combine
- 리팩토링
- 클린 코드
- scrollview
- HIG
- Observable
- rxswift
- UITextView
- clean architecture
- MVVM
- ios
- Refactoring
- swift documentation
- collectionview
- 스위프트
- uiscrollview
- Today
- Total
목록분류 전체보기 (1687)
김종권의 iOS 앱 개발 알아가기
데이터 넘기기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..
Text 컴포넌트의 디폴트 개행 처리 방식SwiftUI의 Text의 디폴트 개행 방식은 띄어쓰기 단위로 개행struct ContentView: View { var body: some View { VStack { // 문구 출처: https://ko.wikipedia.org/wiki/%EC%95%A0%ED%94%8C Text("애플(영어: Apple Inc.)은 미국 캘리포니아의 아이폰, 아이패드, 애플 워치, 에어팟, 아이맥, 맥북, 맥 스튜디오와 맥 프로, 홈팟, 비전 프로, 에어태그 등의 하드웨어와 그 제품들의 iOS, iPadOS, Watch OS, macOS, Vision OS, TV OS 등의 소프트웨어를 설계, 디자인하는 기업이다. 20..
코드 수정 잘 하는 방법코드를 수정해야하는 경우, 어떻게 하면 효율적으로 할 수 있을까?기존 화면에 새로운 요구사항이 생겨서, 기존 코드를 수정해야 할 때 효율적으로 수정하는 방법?이름을 바꾸는 등 리펙토링이 필요할 때 효율적으로 수정하는 방법?코드를 작성하는 흐름을 생각해보면 무턱대고 코드를 수정하는 것보단, 목적지 먼저 수정하는 것이 효율적으로 수정하는 방법예를 들어, A화면, B화면이 있을 때 B화면에 필요한 정보를 A로부터 받고 있는 경우, 그 정보의 이름이 바뀌면 A화면을 먼저 수정하는 것보단 B화면을 먼저 수정해나가는 것이 효율적인 수정 방법단계) B화면을 먼저 수정 -> 빌드 -> A화면에서 컴파일에러 발생 -> A화면 코드 수정필요에 의해 수정한다는 흐름으로 수정하므로 더욱 효율적으로 수정..
자동완성에 any가 생성되는 경우swift6.0부터 아래처럼 동작protocol이 2개가 있고, A에서 B프로토콜을 따르는 변수가 있을 때protocol A { var value: B { get }}protocol B {}A를 준수하려면 value 변수를 무조건 선언해주어야 하는데 이 때 자동완성을 사용하면 swift6.0부터 any가 자동으로 붙음아래처럼 에러가 나고 fix버튼을 누르면 자동완성Fix를 누르면 자동으로 타입 옆에 any키워드가 등장 (swift6.0부터 동작)(이 any키워드를 지워도 정상 빌드됨)struct MyStruct: A { var value: any B}swift6.0미만에서는 any키워드가 자동으로 등장하지 않았는데 swift6.0부터 재현이유?any키워드의 의미..
ScrollView안에 Spacer 적용하는 케이스ScrollView안에 Spacer를 잘 활용해야하는 아래와같은 경우가 존재ex) button은 항상 디바이스 하단에 떠 있고, 그 뒤에 스크롤되는 2개의 텍스트가 있는 경우 ("iOS앱 개발 알아가기", "jake") 상단의 Text가 짧을때는, "jake" Text는 하단 SafeArea로 부터 56만큼 간격 유지상단의 Text가 길어져서 스크롤이 많이 가능하게되면 "jake"는 스크롤 영역이므로 스크롤 밑쪽에 위치상단이 짧은 텍스트상단이 긴 텍스트f구현방법은 상단 Text와 하단 Text 사이에 Spacer()를 넣고, 하단 패딩을 주는 방법이 있는데, ScrollView안에 Spacer()를 그대로 사용하면 동작하지 않음ex) ScrollView안..
Protocol 활용하여 모델 구성하는 방법프로토콜의 기능이 여러가지 있지만 그중에 모델을 구성할 때 유용하게 사용이 가능한 프로젝트에서 여러명의 개발자들이 동시에 일을 진행할때, 모델에 대한 구성을 어떻게 할 것인지 의사결정을 할때도 프로토콜을 활용하면 중복 모델 최소화가 가능사용하는 쪽에서 필요한 정보들을 Protocol로 정의하고 공통 모델에 이 Protocol을 준수하는 방법ex) Cafe라는 정보를 가지고 있는 모델과 API가 아래와 같은 경우struct Cafe { /// 카페 이름 let name: String /// 카페 위치 (주소) let location: String /// 영업 시간 (예: "08:00 AM - 10:00 PM") let..
부모 뷰와 자식 뷰 사이의 애니메이션 처리 원리토글 버튼이 있고 이걸 누를때마다 Text의 문자가fade효과를 내면서 새로 등장하는 애니메이션을 준다고 한 경우 아래처럼 작성이 가능struct ContentView: View { @State var toggle = false var body: some View { VStack { Button("updown Toggle") { toggle.toggle() } Text(toggle ? "is toggled" : "not toggled") .animation(.smooth(duration: 1), val..
뷰 주입받는 방법 3가지 특성단점 1. generics최적화 유지, 타입 안전뷰 타입이 고정됨⭐ 추천2. AnyView동적 뷰 변경 가능성능 저하 가능성⚠️ 가능하면 피할 것1. generics 방법View를 준수하는 타입으로 한정하여, 제네릭을 선언하는 방식최적화가 유지되는 장점// 주입받은 뷰를 표시하는 컨테이너struct ContainerView: View { let content: Content var body: some View { VStack { Text("현재 뷰") .font(.headline) content } .padding() .background(Color...
