1. 리뷰 final class APINetwork { func request(requestable: Requestable, type: T.Type) -> AnyPublisher { let request: URLRequest = requestable.asURLRequest() return URLSession.shared .dataTaskPublisher(for: request) .//생략.. .eraseToAnyPublisher() } } 위 코드에서 리뷰어님께 다음과 같은 리뷰를 받았다. 2. Session 프로토컬 생성 protocol Session { func dataTaskPublisher(for request: URLRequest) -> URLSession.DataTaskPublisher } e..
1. 정규표현식 func isOutOfRangePassword(passwordText: String) -> Bool { let rangeRegex = /^password:.{8,16}$/ if passwordText.prefixMatch(of: rangeRegex) == nil { return true } return false } 정규표현식을 사용하여 받은 문자열의 패턴을 파악하는 것은 흔히 사용되는 방법이다. 그런데 패턴 뿐만 아닌, 원하는 패턴의 문자열을 정규표현식을 사용하여 추출하는 것도 가능하다. 바로 예제를 보자. 2. name capture func isOutOfRangePassword(passwordText: String) -> Bool { let rangeRegex = /^password..
1. 더러운 switch 문 코드를 짜다, 다음과 같은 흉측한 switch 문이 만들어졌다. func idState(id: String) -> IDState { if isOutOfRangeID(id: id) { idState = false return .outOfRange } else if isDuplicateID(id: id) { idState = false return .duplicate } idState = true return .success } 똑같은 idState 코드가 몇 번이나 반복된다. idState = false 를 if문 위로 올려주는 방법도 있겠지만, 프로젝트에서 이 프로퍼티의 특성상 종료되는 순간에 확실한 bool 값을 가지도록 하여야 하였다. 2. defer 예전 NSLock을 ..
Portrait, UpsideDown 체크표시를 해제하면 앱을 가로모드로만 실행하도록 할 수 있다. + 아이패드 환경에선 멀티태스킹 모드를 지원하도록 설정한 경우 강제로 가로/세로 전환을 하지 못하도록 막았다고 함.. 참고한 블로그 https://jinsangjin.tistory.com/158 아이패드(iPad) 기능 지원 삽질기 (to 기존 앱) 기조 상용중인 앱에 아이패드 모드를 지원하게 되었습니다. 관련 작업을 하면서 새롭게 배운점과 느낀점들을 정리해보겠습니다. 1. frame 보다는 Auto-layout을 사용하자. 앱을 보면 팝업, 커스텀 키 jinsangjin.tistory.com
1. TARGETS - General - Deployment Info - Supports multiple windows 으로 들어가기 2. Enable Multiple Windows Yes로 변경 3. 이제 아이패드 환경에서 여러 개를 띄워 사용 가능
1. Collection view 생성 2. Custom Cell에 대한 class 생성 3. Xib 파일 생성 4. File's Owner, Custom Class 란에 방금 생성한 custom cell의 class 입력 5. 재사용 식별자 등록(여기선 "cell" 로 등록, 원하는 아무 문자로 설정해도 됨) 6. 재사용할 형태로 만들고, 추가한 요소들 IBOutlet 연결 7. collectionView를 사용하는 class 내부 didLoad 밑에 custom cell의 class 이름(여기선 CardCollectionViewCell), 재사용 식별자(여기선 cell) 넣어서 얻은 nib name 으로 collectionView.register 등록 override func viewDidLoad()..