iOS

iOS/Swift

[iOS] 초기화 메소드 init 정리 (1)

스위프트에서 초기화 메소드 init()은 객체가 메모리에 load 될 때 내부적으로 호출되는 메소드로, 생성자(Constructor)라고도 불린다. 초기화 메소드 init()은 클래스와 구조체에 모두 제공된다. 스위프트의 중요한 특징은 객체가 생성될 때 모든 저장 프로퍼티의 값이 초기화 되어 있어야 한다는 것인데, 저장 프로퍼티의 자동 초기화는 옵셔널 타입으로 선언된 경우에만 제한적으로 허용된다. 이외의 경우는 명시적으로 저장 프로퍼티를 초기화 해주어야 한다. 모든 저장 프로퍼티는 적절한 초기값을 가지고, 누락없이 완전히 초기화 되어야 한다. 저장 프로퍼티의 명시적 초기화는 두가지 방법이 있다. 저장 프로퍼티 선언시 초기화 하는 방법 초기화 메소드 init() 내에서 저장 프로퍼티의 값을 할당하는 방법 ..

iOS/Swift

[iOS] Swift - String 원소를 subscript로 접근할 수 없는 이유

스위프트의 String은 다른 언어들의 String과는 많이 다르다. 대게 C#, Java와 같은 언어들은 '[ ]'를 이용하여 인덱싱하여 문자열의 원소 하나하나에 접근할 수 있다. 하지만 스위프트에선 일명 서브스크립트(Subscript)라 불리는 [ ]를 이용하여 문자열을 구성하고 있는 문자 하나하나에 접근할 수 없다. // C# var str = "Hello"; var first = str[0]; Console.Write(first); // H // Swift var str "Hello" var first = "H" // 'subscript(_:)' is unavailable: cannot subscript String with an Int, use a String.Index instead. prin..

iOS/Swift

[Swift] 고차함수(High-order function) - map, filter, reduce

고차함수 Swift는 함수형 언어이기 때문에, 어떤 함수를 객체로 취급하여 다른 함수의 인자로 전달할 수 있다. (https://dew-it.tistory.com/65) [iOS] 함수형 언어 Swift - 일급 함수 Swift는 객체지향 언어이자 함수형 언어이다. 함수형 언어가 되기 위해서는 일급 함수의 조건을 만족해야 한다. Swift에서 Closure는 매우 중요한 개념인데, 이를 이해하기 위해서는 일급함수의 개념 dew-it.tistory.com 고차함수는 이러한 특성을 이용하는데, 다른 함수를 인자로 전달 받거나 함수의 실행 결과를 함수로 반환하는 함수를 고차함수라고 부른다. Swift의 고차함수 종류로는 map, filter, reduce 등이 있고, 표준 라이브러리 컨테이너 타입인 Array..

iOS/Swift

[iOS] Safe Area란?

XCode에서 Storyboard에 ViewController를 추가하면 'Safe Area'란 객체가 자동으로 같이 추가된다. Safe Area는아이폰8 모델 이후에 등장한 개념이다. 아이폰8 모델 이후부턴 홈버튼도 사라지고 상단 영역에 노치가 생겼다. 노치 영역에는 배터리, 와이파이 정보, 시간 정보 등 시스템에서 제공해는데, 앱이 해당 영역을 가리면 해당 정보의 가독성이 떨어지기 때문에 가리지 않도록 조치가 필요했다. 그래서 등장한 개념이 Safe Area이다. 결론적으로 말하면, Safe Area는 View가 시스템 정보를 제공하는 아이폰의 노치영역과 홈바영역을 침범하지 않도록 마진을 설정한 영역이다. 그러니깐 노치영역이랑 홈바 영역을 보호하기 위한 보호하는 영역이 Safe Area인 것이다! S..

iOS/Swift

[iOS] sqlite에 UIImage 저장 / 로딩하기

저장하기 1. Image를 Base64로 인코딩한다 func EncodeImageToBase64(image: UIImage) -> String { let imageData = image.jpegData(compressionQuality: 1)! as NSData let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters) return strBase64 } 이때, image를 jpeg 형식의 데이터로 변환해야 한다. png 형식은 이미지의 방향 정보를 갖고있지 않기 때문에, png로 저장하게 되면 나중에 load 할 때 원본 이미지 방향이 잘못될 수 있다! ( 이미지가 90도, 180도 회전할 수 있다) 2. INSERT Q..

iOS/Swift

[iOS] UIImage -> CGImage 변환시 이미지 방향이 변하지 않게 하기

- UIImage객체를 downsampling 작업을 통해 메모리 사용량을 줄이는 작업을 하는 중, downsampling된 UIImage를 UIImageView에 렌더링 하면 이미지 방향이 원본과 다른 문제가 발생했다. - 세로로 표현되어야 할 이미지가 downsampling 후 가로로 표현되었다. func downSample(scale: CGFloat) -> UIImage { let data = self.pngData()! as CFData let imageSource = CGImageSourceCreateWithData(data, nil)! let maxPixel = max(self.size.width, self.size.height) * scale let downSampleOptions = [ k..

iOS/Swift

[iOS] UIImagePickerController에서 가져온 이미지에서 GPS 정보 파싱하기

UIImagePickerController를 이용해 앨범에서 사진을 가져왔을 때, 사진의 위치정보(위도, 경도)를 파싱할 수 있다. 1. Photos 프레임워크를 import 한다. Photos 프레임워크는 iOS에서 사진, 동영상, 라이브포토를 보여줄 때 사용한다. import Photos 2. UIImagePickerControllerDelegate의 메소드 imagePickerController(didFinishPickingMediaWithInfo: )에서 선택된 이미지의 위치정보를 읽는다. func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerContr..

iOS/Swift

[iOS] 함수형 언어 Swift - 일급 함수

Swift는 객체지향 언어이자 함수형 언어이다. 함수형 언어가 되기 위해서는 일급 함수의 조건을 만족해야 한다. Swift에서 Closure는 매우 중요한 개념인데, 이를 이해하기 위해서는 일급함수의 개념을 이해하는 것이 필수이다! 일급 객체의 조건 1. 객체가 런타임에도 생성이 가능해야 한다 2. 인자값으로 객체를 전달할 수 있어야 한다 3. 반환값으로 객체를 사용할 수 있어야 한다 4. 변수나 데이터 구조 안에 저장할 수 있어야 한다 5. 할당에 사용된 이름과 관계없이 고유한 구별이 가능해야 한다 함수가 위 조건을 만족하면 이를 일급 함수(First-Class Function)이라고 하고, 이 언어를 함수형 언어로 분리한다. 즉 함수를 객체처럼 취급하는 게 함수형 언어의 특징인 것이다! 일급 함수의 ..

iOS/Swift

[iOS] 프로토콜 (Protocol )

Swift에서 프로토콜은 Java, C#과 같은 객체지향 언어의 인터페이스와 거의 같은 개념이다. 프로토콜에 대해 알아보도록 하자. 프로토콜 프로토콜은 클래스나 구조체의 설계도로, 클래스나 구조체가 구현해야 할 메소드와 프로퍼티 등으로 구성된다. 프로토콜 사용 이벤트 발생시 콜백 메소드 호출을 위한 Delegate pattern을 구현할 때 프로토콜을 사용한다. 프로토콜은 클래스나 구조체의 명세만 정의하고 기능을 구현하지 않는다. 프로토콜의 명세만 노출하고 구현체의 메소드나 프로퍼티를 은닉한다 클래스, 구조체 구현시 프로토콜을 이용하여 공통된 메소드, 속성을 정의할 수 있다. 하나의 타입으로 사용할 수 있다. 따라서 메소드의 파라미터, 리턴 타입으로 사용될 수 있으며 상수 변수의 타입으로도 사용할 수 있..

iOS/Swift

[iOS] Dark mode 사용하지 않기 (Light mode 강제 설정하기 )

앱에서 다크모드를 사용하지 않으려면 info.plist 열기 Information Property List 하위에 "Appearance" 키 추가하기 Information Property List 칸 위에 마우스 오버 하면 + 버튼이 보이고, + 버튼을 눌러 키를 추가할 수 있다. Appearance Key의 Value로 "Light"를 설정한다.

듀IT
'iOS' 카테고리의 글 목록