일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UITextView
- Observable
- UICollectionView
- HIG
- 클린 코드
- MVVM
- Clean Code
- ribs
- collectionview
- swiftUI
- Xcode
- 애니메이션
- 리팩토링
- combine
- swift documentation
- Protocol
- Human interface guide
- 리펙터링
- tableView
- 리펙토링
- map
- 스위프트
- SWIFT
- ios
- uitableview
- RxCocoa
- clean architecture
- uiscrollview
- rxswift
- Refactoring
- Today
- Total
목록ios (1094)
김종권의 iOS 앱 개발 알아가기
플러그인 패턴핵심 기능을 변경하지 않고도 새로운 기능을 추가하거나 확장할 수 있도록 하는 구조적 패턴유연성과 확장성이 높다는 장점플러그인 패턴 구조ex) 계산기 로직을 플러그인 패턴으로 만들기PluginManager가 있고 여기서는 핵심 기능을 담당하며, 이곳에 추가하고 싶은 기능(플러그인)들을 등록하고 실행할 수 있는 관리자 역할let pluginManager = PluginManager()플러그인 인스턴스를 만들어서 플러그인에 등록let additionPlugin = AdditionPlugin()let multiplicationPlugin = MultiplicationPlugin()pluginManager.registerPlugin(additionPlugin)pluginManager.registerP..
명령형 vs 선언형 코드 작성의 흐름명령형 프로그래밍"어떻게" UI를 업데이트할지 명시적으로 작성let label = UILabel()label.text = "Hello, World!"label.textColor = .bluelabel.frame = CGRect(x: 0, y: 0, width: 200, height: 50)view.addSubview(label) 선언형 프로그래밍좀 더 코드가 뷰의 형태와 닮은 형태로 작성struct ContentView: View { var body: some View { Text("Hello, World!") .foregroundColor(.blue) .frame(width: 200, height: 50) ..
LayoutPriority 개념layoutPriority값이 크면, 뷰가 다른 뷰보다 커질 수 있는 힘이 큼기존 swift에서 ContentHuggingPriority, ContentCompressionResistancePriority 두 개를 두어서 헷갈렸던 것을 SwiftUI에서는 layoutPriority하나로 표현HStack에 두 개 의 텍스트가 있을 때 예시참고) 일반적으로는 HStack이 있을때 두 개의 뷰에는 동일한 width로 할당되지만 띄어쓰기가 있으면 내부적인 개행 처리 때문에 아래처럼 균등하지는 않게끔 배치됨struct ContentView: View { var body: some View { HStack { Text("This is a moder..
뷰 속성 순서의 중요성SwiftUI에서는 뷰를 선언하고 속성을 선언적으로 넣어주어서 뷰를 완성해나가는데, 속성을 넣을때 순서도 중요ex) 아래 firstView, secondView는 frame(minHeight:)의 선언 순서만 다르고 나머지는 동일한 코드지만 완전히 다른 뷰가 보여짐@ViewBuilderprivate var firstView: some View { VStack(spacing: 0) { Color.clear .frame(width: 287, height: 0) Text("테스트 문구") } .frame(minHeight: 105) // frame(minHeight:) 순서 위치만 다른데, 아래처럼 두 뷰를 VSt..
투명 뷰로 감싸고 터치 이벤트 받는 방법투명 뷰로 감싸는 경우?뷰를 구성하고 특정 영역을 터치 이벤트 영역으로 잡고 싶거나, 접근성을 위해서 특정 뷰로 덮어서 그 부분만 특정 접근성을 주고 싶을때, 가장 단순한 방법은 투명 뷰로 감싸서 처리SwiftUI에서는 투명 뷰로 감싸기 위해서 아래처럼 사용이 가능감쌀 뷰에 overlay를 선언하고 그 위에 Color.clear를 선언하고 여기에 접근성과 tapGesture를 주어서 간편하게 뷰를 감싸는 방법이 존재struct ContentView: View { var body: some View { VStack { Image(systemName: "globe") .imageScale(.large) ..
VStack, HStack 사용 할 때 주의할 점VStack, HStack은 내부 콘텐츠 크기에 의해서, 자기 자신의 크기가 결정되는 컴포넌트대부분 실수하는 것이 VStack, HStack에 패딩을 넣거나 사이즈를 고정하는 경우가 존재ex) VStack에 width를 120으로 고정하는 경우struct ContentView: View { var body: some View { VStack(alignment: .leading) { Text("start") VStack { Text("1") Text("2") Text("3") ..
retroactive 개념단어의 의미"효력이 소급하는"이라는 의미소급하다란 의미는 새롭게 적용된 것이 과거에도 영향을 미친다는 의미ex) 직장인이 25년도 3월에 연봉이 올랐는데, 1월과 2월 월급도 3월에 연봉 오른 값으로 돈을 더 주는 것Swift6.0에서도 @retroactive를 사용하여 코드의 유연성을 가져갈 수 있는데 아래에서 계속 설명@retroactive의 의미이번 프로젝트에서 Foundation에 있는 Date를 사용하다가 id가 필요하여 내가 임의로 Identifiable을 선언한 상태extension Date: Identifiable { public var id: TimeInterval { timeIntervalSince1970 }}1년 후에 갑자기 애플이 Date에 Identi..
모두 알고 있는 클로저 의미 돌아보기다른 부분으로 전달할 수 있는 독립적인 코드 블록{ (매개변수) -> 반환형 in 실행 코드} ex) 클로저 예시 - 기능 실행let sayHello = { (name: String) -> String in return "Hello, \(name)!"}sayHello("Jake") // "Hello, Jake" ex) 클로저 예시 - 기능 제공let multiply = { $0 * $1 }print(multiply(4, 5))이처럼 클로저는 다른 부분으로 전달할 수 있고 그 것을 저장하여 실행을 지연시킬 수 있는데 여러가지 사용처가 존재설계 관점에서의 클로저설계 관점에서의 클로저의 역할은 해당 기능을 사용하려는 쪽에 위임 하는 행위의 의미를 가지고 있음커스텀..