분류 전체보기

    [iOS] YPImagePicker

    YPImagePicker YPImagePicker는 기기의 사진 라이브러리 또는 카메라에서 이미지를 선택하는 쉽고 사용자 정의 가능한 방법을 제공하는 인기 있는 iOS용 이미지 선택 라이브러리다. 설치 YPImagePicker는 CocoaPods를 사용하여 설치할 수 있다. 설치하려면 Podfile 추가한다. pod 'YPImagePicker' 위의 줄을 추가한 후 터미널에서 pod install을 실행하여 라이브러리를 설치한다. 사용법 사용하려는 파일의 맨 위에 있는 라이브러리를 import한다. import YPImagePicker 이미지 선택기를 표시하려는 메서드에서 YPImagePicker 인스턴스를 만든다. let picker = YPImagePicker() 필요에 따라 YPImagePicker..

    [iOS] SDWebImage 라이브러리

    https://github.com/SDWebImage/SDWebImage GitHub - SDWebImage/SDWebImage: Asynchronous image downloader with cache support as a UIImageView category Asynchronous image downloader with cache support as a UIImageView category - GitHub - SDWebImage/SDWebImage: Asynchronous image downloader with cache support as a UIImageView category github.com SDWebImage 이 라이브러리는 url을 받아서 비동기적으로 이미지를 받아오고, 받아온 이미지를..

    [iOS] UIImagePicker

    UIImagePicker // 버튼이 눌리면 이미지 피커가 떠오르도록 @objc func handleProfilePhotoSelect(){ //이미지 피커 설정 let picker = UIImagePickerController() picker.delegate = self picker.allowsEditing = true present(picker, animated: true, completion: nil) } ImagePickerDelegate extension RegistrationController: UIImagePickerControllerDelegate{ // 이미지피커 선택이 완료되면 전달되는 델리게이트 func imagePickerController(_ picker: UIImagePickerC..

    [iOS] some키워드?

    some 키워드? SwiftUI를 공부하며 많이 본 키워드이지만 난 아직 SwiftUI를 깊게 공부하지 않는다 하지만 일단 한번 본다면 some키워드는 Swift5.1의 새로운 기능이다. some 키워드는 연산프로퍼티인 body안에 불투명한 타입이 있음을 나타낸다?? some 키워드는 프로토콜을 준수하는 불투명한 유형을 리턴하기위해 프로토콜과 함께 사용될 수 있다. protocol Shape { func describe() -> String } struct Square: Shape { func describe() -> String { return "I'm a square. My four sides have the same lengths." } } struct Circle: Shape { func desc..

    [iOS] KVO(Key-Value Observing)

    KVO(Key-Value-Observiing)란? KVO는 A객체에서 A의 변경사항을 B객체에게 알리기 위해 사용하는 코코아 프로그래밍 패턴이다. KVO를 사용하면 다른 개체의 특정 속성이 변경될 때 알림을 받도록 객체를 등록할 수 있다. 프로퍼티 옵저버인 willSet과 didSet이랑 유사하지만 외부에 관찰자를 추가하는것이 다르다. 또한 Objective-C 런타임에 의존하기 때문에 순수한 Swift에서는 그리 좋지 않다고한다...? 따라서 NSObject를 상속받는 클래스로 정의해주어야 하며, 각각의 프로퍼티에는 @objc dynamic 이라는 표시를 해야한다. RxSwift와 유사한 느낌이다? Observing을 위한 Setup class Address { var town: String init(..

    소스코드 버전 관리 - 깃(Git)

    버전관리? 협업 프로젝트에서는 버전관리가 필요하다. 시간이 지날수록 어느 파일이 최종 업데이트 파일인지 분간하기 어려워지기 때문이다. Git은 소스코드 버전관리 시스템이다. 개발 과정에서 원하는 시점을 저장하고 자유롭게 이동하여 소스코드를 추가, 삭제 할 수 있게 해준다, 오류가 일어나도 저장된 시점으로 되돌아가면 되기 때문에 유용하다. 이를 사용하지 않고 시점마다 프로젝트를 압축해서 저장한다면 압축파일이 무한 증식 하겠지? 이럴 때 사용하는 기술이 git(깃)이다. 다양한 타이밍에 코드상태를 기록할 수 있고 다양한 사람들에게 공유할 수 있다. git init Git을 사용하기 위해선 Xcode Project가 포함된 경로에 Git을 설정한다. Repository(저장소) git init을 사용하여 경로..

    [iOS] URLSessionTask failed with error: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. HTTP접근 허용

    Alamofire를 사용해 통신을 하다가 다음과 같은 에러가 발생했다. URLSessionTask failed with error: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection APP Transport Security(ATS): HTTP에서 보안이 향상된 버전이 HTTPS이며 대부분의 웹이 HTTPS를 사용하고 있지만 그렇지 않은 서비스도 있다. iOS9 이후로 APP Transport Security(ATS)를 이용하여 HTTP접속을 통한 접속을 기본적으로 차단한다. 내가 접근한 API "http://openapi.seoul.go.kr:8088..

    RxSwift + MVVM 곰튀김님

    유튜브 곰튀김님의 영상을 보고 정리. https://www.youtube.com/watch?v=iHKBNYMWd5I&list=PL03rJBlpwTaBrhux_C8RmtWDI_kZSLvdQ&index=2 Subject Subject: 옵저버블처럼 구독할 수 있고, 옵저버블 밖에서 값을 받아 데이터를 컨트롤해서, 새로운 값을 집어넣어 줄 수 있는것. PublishSubject 구독이 시작되고 전달되는 이벤트를 전달한다. BehaviorSubject 기본값을 가지고 시작한다. 구독을 시작한 시점에 데이터가 전달이 안되었다면 기본값을 내려주고, 새로운 구독자가 생기면 가장 최근에 전달된 값을 전달한다. AsyncSubject 데이터가 전달되고, 여러 구독자가 생기더라도 데이터를 내려보내주지 않는다. Comple..

    @escaping, @autoclosure

    @escaping (탈출) 키워드 원칙적으로 함수의 실행이 종료되면 파라미터로 쓰이는 클로저도 제거된다. @escaping는 클로저를 제거하지 않고 함수(스택프레임)에서 탈출시킨다. (함수가 종료되어도 클로저가 존재하도록 함) 1. 클로저를 단순 실행 ==> non-escaping 클로저 import Foundation func performEscaping1(closure: () -> ()) { print("프린트 시작") closure() } 함수 내부에서 단순 실행하고 종료할 때 클로저를 Heap에 저장할 필요가 없다. @escaping 사용의 대표적인 경우 1. 어떤 함수 내부에 존재하는 클로저(함수)를 외부 변수에 저장하는 경우 ➡️ 파라미터로 받은 클로저를 외부의 변수에 할당하는 경우. Heap..

    [Swift] - 클로저(Clousre)

    클로저(Closure) 클로저는 사용자의 코드 안에서 전달되어 사용할 수 잇는 로직을가진 중괄호"{}"로 구분된 코드 블럭이다. 쉽게 말해 클로저는 이름이 없는 함수이다. 그렇다면 함수는 이름이 있는 클로저일것이다. 클로저와 함수는 기능이 완전히 동일한데, 형태만 다르다고 생각하면 된다. 클로저를 사용하면 따로 함수를 만들어야 할 불편함 없이 즉석에서 함수를 만들 수 있다. 클로저의 형태 함수의 형태 func myFunction(매개변수 이름: 매개변수 타입) -> 반환 타입{ returun 반환타입 } func add(x: Int, y: Int) -> Int{ return(x+y) } print(add(x: 10, y: 20)) // 30 클로저의 형태 { (매개변수이름: 매개변수타입) -> 리턴타입 ..