일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Human interface guide
- UICollectionView
- uiscrollview
- swift documentation
- collectionview
- ribs
- 리팩토링
- 스위프트
- swiftUI
- Protocol
- 애니메이션
- Xcode
- Refactoring
- tableView
- ios
- Clean Code
- map
- MVVM
- rxswift
- uitableview
- SWIFT
- 리펙터링
- Observable
- UITextView
- 클린 코드
- HIG
- clean architecture
- combine
- 리펙토링
- RxCocoa
- Today
- Total
목록ios (1095)
김종권의 iOS 앱 개발 알아가기
오류 코드보다 예외를 지향 예외처리는 논리가 들어간 로직부분과 예외를 처리하는 부분을 나누어서 코드가 섞이지 않게되어 복잡해지지 않게되는 장점이 존재 오류 코드는 테스트가 힘들지만, 예외를 사용하면 throw에 관한 리턴값을 확인할 수 있어서 TDD에도 용이 WRONG class DeviceController { func sendShutDown() -> Void { if handle != DevcieHandle.INVALID { if record.getStatus() != DEVICE_SUSPENDED { pauseDevice(handle) clearDeviceWorkQueue(handle) closeDevice(handle) } else { Log.error("Device suspended. Unabl..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Mz150/btrlfABlayD/wrkwp9RySecs0nI7cYigfK/img.png)
.mp3 파일 준비 프로젝트 디렉토리 아무곳에 저장 .mp3 파일 재생 방법 Bundle.main 경로에 .mp3파일 추가 AVFoundation 프레임워크에서 지원해주는 AVAudioPlayer로 Bundle.main에 있는 .mp3 파일을 실행 AVAudioPlayer 사용처 오디오 플레이에 사용 볼륨, 속도, 반복등을 제어할 수 있는 기능 제공 여러 사운드를 동시에 재생할 수 있는 기능 제공 구현 AVDoundation 임포트 import AVFoundation audioPlayer 인스턴스 선언 class ViewController: UIViewController { var audioPlayer: AVAudioPlayer? } .mp3파일을 찾아서 해당 파일을 audioPlayer를 실행하는 메소..
Interface를 사용해야 하는 이유 Interface는 swift에서 protocol을 의미 추상화 - 외부에서 구현체의 변수에 의존하지 않도록하기 위함 인터페이스는 자료 구조를 명백하게 표현 WRONG ex) Interface가 아닌 경우 - 구현을 외부에 노출 외부에서 구현체를 알아야하는지? 외부에서는 직교 좌표계인지, 극 좌표계인지 알 필요없이 값만 필요한 상황이므로 불필요한 정보를 외부에 노출하여, 외부에서 데이터를 사용할 때 불필요한 고민을 주는 상황 class Point { var x: CGFloat var y: CGFloat init(x: CGFloat, y: CGFloat) { self.x = x self.y = y } } RIGHT ex) Interface인 경우 - 구현을 외부에 감..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTxsYX/btrk6OfTexM/07S3TD1IUSbkzYzNIFSrO1/img.png)
1. 실시간 채팅 앱 구현 방법 (MessageKit, Firebase, Firestore) - 채팅 UI 2. 실시간 채팅 앱 구현 방법 (MessageKit, Firebase, Firestore) - Firestore Firebase 연동 App 생성 후 GoogleService-info.plist 파일 추가 Firebase Authentication 로그인 없이도 사용할 수 있도록 익명 선택 Firebase Storage 연동 이미지를 저정하는 서버 제공 - 아래 페이지에서 시작하기 클릭 SPM으로 Firebase SDK 설치 https://github.com/firebase/firebase-ios-sdk.git FirebaseAuth, FirebaseFirestore, FirebaseFiresto..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yhhYw/btrkPHuuhsY/kqFLYZOdqmXgYb5cxjJqE1/img.png)
1. 실시간 채팅 앱 구현 방법 (MessageKit, Firebase, Firestore) - 채팅 UI 2. 실시간 채팅 앱 구현 방법 (MessageKit, Firebase, Firestore) - Firebase SPM으로 MessageKit 설치 https://github.com/MessageKit/MessageKit 화면 플로우 MessageKit 주요 모듈 MessagesViewController: UICollectionView를 상속하여 구현된 모듈이고 이 모듈을 상속하여 CahtViewController 생성 내부적으로 messagesCollectionView 프로퍼티 사용 가능 import UIKit import MessageKit class ChatVC: MessagesViewCont..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/D0Tcb/btrkWOZKtb4/0K1Uw9a9zU8akaatFqEbLk/img.png)
Xcode File Template 파일을 생성할 때 기존에 정의한 Template에 따라 생성되는 로직 아래의 경로로 이동하면 기존의 template들을 확인 가능 cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/ `open .` 실행하면 아래 디렉토리 오픈 ex) 파일 템플릿 - Unit Test Case Class Template 생성 방법 Custom Template은 위 위치에다가 놓지 않고 다른 경로에 추가하여 연동 아래 경로에 Templates폴더와 그 하위에 File Templates 폴더를 생성 cd ~/Library/Developer/Xcode..
되로록이면 주석을 지양 잘 달린 주석은 그 어떤 정보보다 유용하지만, 프로그래밍 언어 자체의 표현력이 풍부하다면 주석이 거의 필요하지 않을 것이므로, 주석이 필요 없도록 프로그래밍의 표현력에 집중 코드는 분리되어 점점 변하지만 주석을 직접 수정해주지 않으면 남아있는 경우가 존재 주석은 나쁜 코드를 보완하지 못하므로, "모듈의 이해를 위해서 주석을 달아야지" 보다는 "코드를 정리해야지"의 관점이 필요 WRONG - 나쁜 코드를 보완하려는 목적으로 주석이 사용되었지만, 나쁜 코드를 정리하는 것이 훨씬 중요 // 직원에게 복지 혜택을 받을 자격이 있는지 검사 if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) { ... } RIGHT - 나쁜 코드를 정리하..
짧은 이름보다는 서술적인 이름을 선택 함수를 구현할 때 항상 함수의 이름을 확인하면서, 함수의 이름에 부합하는 작업만 포함하고 있는지 확인할 것 길지라도 서술적인 이름이 지향 함수가 하는 일을 좀 더 잘 표현 좋은코드는 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행하도록 짜는 코드이므로 서술적인 코드가 짐작하기가 용이 ex) SetupTeardownIncluder, isTestable(), includeSetupAndTeardownPages() 모듈 내에서의 일관성 모듈 내에서함수 이름은 같은 문구, 명사, 동사를 사용 class IncludeModule { func includeSetupAndTeardownPages() {} func includeSetupPages() {} func inclu..