전체 글

정리를 위한 공부
트러블슈팅

UITextField secureTextEntry 설정시 키체인 영역 안나오게 하기

로그인 기능을 구현하던 중, 키보드 레이아웃 관련 이슈가 발생했다. 😇 문제 상황과 원인 비밀번호 TextField의 보안을 위해 isSecureTextEntry 속성을 true로 지정해주었는데, 텍스트 필드를 이동할때마다 화면이 요동치는 현상이 발생하였다. 현재 뷰의 바텀 레이아웃을 KeyboardLayout에 맞춰줬는데, 키보드 위에 생기는 키체인 패스워드 영역 때문에 발생한 것. 키보드 레이아웃이 키체인 영역이 생길때마다 그에 맞게 늘어나게 되고, FirstResponder인 텍스트필드가 바뀔때마다 키체인 영역의 노출 여부도 바뀐다. 따라서 화면이 요동치는 것처럼 보이는 것이다. 한편 키체인 영역은 텍스트필드가 isSecureTextEntry == true 일때 등장하며, 1) 키체인에 저장된 암호..

iOS

(Swift) Result 타입에 대한 값 맵핑 하기

Network 통신을 통해 Response로 받아올 Result 타입을 원하는 형태로 맵핑하기 🔥 목표: 네트워크 통신의 결과로 completion Handler에 내보내줄 Result 타입의 값을 원하는 타입으로 맵핑하기 func map( _ transform: (Success) -> NewSuccess ) -> Result func mapError( _ transform: (Failure) -> NewFailure ) -> Result where NewFailure : Error map: Result의 성공시 반환 타입을 새로운 타입으로 맵핑하는 메서드 mapError: Result의 실패시 반환 타입을 새로운 타입으로 맵핑하는 메서드 - Response 모델 타입 struct SubwayStatio..

트러블슈팅

CollectionView 페이징시 스크롤 멈춤현상 해결하기(feat. Activity Indicator, RefreshControl)

😭 겪은 문제 API 페이징이 적용된 CollectionView에서, 하단으로 빠르게 스크롤시 스크롤이 멈추는 현상을 겪게 되었다. 정확히는 CollectionView Prefetching을 통해 새로운 데이터를 받아오고, 컬렉션뷰를 reload하는 시점에 스크롤이 멈추었다. 😇 원인 컬렉션뷰를 새로고침할때 사용하던 refreshControl을 네트워크 통신의 로딩으로 같이 사용해서 발생한 문제였다. 😭 private lazy var refreshControl: UIRefreshControl = { let refreshControl = UIRefreshControl() refreshControl.addTarget( self, action: #selector(viewControllerDidRefresh(_..

SeSAC

8.24 ~ 8.25 TIL(SeSAC iOS 3기)

Generic 타입에 유연하게 대응하기 위한 요소. 제네릭으로 구현한 타입과 기능은 재사용하기 쉽고 코드의 중복도 줄일 수 있기 때문에 깔끔하고 추상적인 표현이 가능. T: Type Parameters로 플레이스 홀더와 같은 역할을 함. 타입의 종류는 알려주지 않지만 특정한 타입이라는 것은 알려줌. T가 아닌 다른 문자열을 작성해도 되지만, 일반적으로는 UpperCased 또는 T, U 등을 사용함. 🔥 만약 함수를 오버로딩하는데 제네릭을 사용한 경우, 제네릭으로 구현한 함수보다 타입이 명확한 함수가 우선순위가 더 높다. 🔥 프로토콜에서 제네릭을 사용하려면 associated type 을 사용해야 한다. protocol GenericExample { associatedtype T var variable:..

SeSAC

8.23 TIL(SeSAC iOS 3기), MapKit + frozen Enumeration

MapKit MKMapView를 활용한 맵뷰 구현하기 1. import MapKit 2. MKMapView 인스턴스 생성 3. MKMapView의 region과 annotation 설정 center: 맵뷰의 중심이 되는 좌표. latitudinalMeters, longitudinalMeters: 축적. removeAnnotations([Annotation]): 맵뷰의 모든 Annotation을 삭제. extension MapViewController { func configureMapView() { if let coordinate = LocationManager.shared.currenCoordinate { let region = MKCoordinateRegion( center: coordinate, l..

SeSAC

8.23 TIL(SeSAC iOS 3기), CoreLocation

CoreLocation CLLocation을 활용한 위치정보 받아오기 import CoreLocation CLLocationManager() : 위치에 대한 대부분의 로직을 담당하는 매니저 객체를 생성. CLLocationManagerDelegate 프로토콜 채택 및 기능 구현. didUpdateLocations: 사용자의 위치를 성공적으로 가져온 경우, 위치 업데이트 시점마다 호출됨. didFailWithError: 사용자의 위치를 가져오지 못한 경우. locationManagerDidChangeAuthorization: 사용자의 권한 상태가 바뀌면 알려줌(iOS14+, 14 이전은 didChangeAuthorization) locationManager.delegate = self: 위치 프로토콜 de..

SeSAC

8.21 ~ 8.22 TIL(SeSAC iOS 3기)

IBInspectable과 IBDesignable IBInspectable Interface Builder에 해당 값의 정보를 보여줌 final class CustomButton: UIButton { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius } set { layer.cornerRadius = newValue } } } IBDesignable 컴파일 타임에 InterfaceBuilder에서 설정한 속성이 스토리보드에 반영 import UIKit @IBDesignable final class CustomButton: UIButton { @IBInspectable var cornerRadius: CGFloat { ge..

SeSAC

8.14 ~ 8.18 TIL

1. Enum과 Stored Property Enums must not contain storde properties 열거형에서 저장 프로퍼티를 선언할 경우 다음과 같은 에러가 발생한다. 열거형은 컴파일 타임에 로드되므로 인스턴스를 생성할 수 없기 때문에, 저장 프로퍼티는 열거형 내에서 선언할 수 없다. 연산 프로퍼티는 값을 저장하지 않으므로 열거형 내에서 선언이 가능하다. 인스턴스 연산 프로퍼티는 인스턴스 프로퍼티만, 타입 연산 프로퍼티는 타입 프로퍼티만 사용이 가능하다. enum AAA: String, CaseIterable { static let baseURL = "https://www.naver.com" case aa case bb case cc // test: 인스턴스 연산 프로퍼티 -> 값을 ..

SeSAC

8.7 ~ 8.11 TIL

1. overriding vs overloading - overriding: 서브 클래스에서 슈퍼 클래스의 메서드, 프로퍼티, 서브스크립트를 재정의 하는 것. - overloading: 매개변수, 반환 타입의 차이로 동일한 이름의 함수를 구분하는 것, 동일한 이름의 함수를 중복 선언하는 것. 2. URL의 구조 http://news.naver.com:80/article/3234234?lang=ko&page=1 scheme http:// 네트워크 통신에 사용할 프로토콜 http, https, ftp 등 host news.naver.com port - :80 path /article/3234234 query string ?lang=ko&page=1 URL 허용 문자 URL에서는 기본적으로 ASCII 코드 값..

iOS

TextField의 복사/붙여넣기 기능 막기(feat. canPerformAction)

보통 모바일에서 화면이나 텍스트를 꾹 누르면 복사 / 붙여넣기 등의 기능이 있는 메뉴 바가 나오는데, 이를 Edit Menu라고 한다. Edit Menu Edit menus | Apple Developer Documentation An edit menu lets people make changes to selected content in the current view, in addition to offering related commands like Copy, Select, Translate, and Look Up. developer.apple.com Edit menu를 통해 사용자는 선택된 컨텐츠로부터 복사, 붙여넣기, 번역, 검색 등을 수행할 수 있다. 시스템이 제공하는 Edit menu 기능들은 U..

예스코치
YescoachiOS