Combine 프레임워크는 A declarative Swift API for processing values over time을 제공한다고 설명한다. 많이들 (declarative) 선언형 프로그래밍과 (imperative) 명령형 프로그래밍을 말한다. Imperative Programming vs Declarative Programming 둘은 상반되는 프로그래밍 개념이다. HOW 명령형 프로그래밍 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종이다. 자연 언어에서의 명령법이 어떤 동작을 할 것인지를 명령으로 표현하듯이, 명령형 프로그램은 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이다. 예를 들어 C#, C++ 및 Java와 같은 언어는 명령형 프로그..
WWDC 2019에서 Introducting Combine에 대해서 발표가 나왔다. https://developer.apple.com/videos/play/wwdc2019/722 Combine 프레임워크는 시간에 지남에 따라 값을 처리하기 위한 선언적인 스위프트 API를 제공한다. Combine의 특징 - Generic - Type safe - Composition first - Request driven Combine은 이와 같은 비동기적인 인터페이스들에 사용하면 편리하다 - Target / Action - Notification center - URLSession - Key-value observing - Ad-hoc callbacks Combine에는 Publisher, Subscriber, Ope..
현재 진행하는 프로젝트에서 API 리퀘스트를 날려 받아온 데이터를 디코딩하고 넣어줍니다. 프로퍼티가 새로운 데이터가 들어옴을 감지하면 tableView를 리로드 시켜줍니다. 사실 스위프트에서는 그냥 프로퍼티 옵져버를 사용하는데요. 오브젝티브씨에서는 KVO key value observing이라는 친구가 있습니다. KVO는 오브젝트 값의 변화를 통지, 감시하기 위한 구조입니다. 특정 인스턴스의 특정 프로퍼티가 변화했을 때를 파악해 그에 맞는 처리를 할 수 있습니다. 위에서 오브젝트 값의 변화를 통지, 감시한다라고 했죠. KVO를 사용하려면 먼저 NSObject를 상속받아야 합니다. 즉 클래스여야 합니다. KVO를 그림으로 나타내자면 아래와 같은 흐름입니다. 이제 실제로 사용해봅시다. KVO로그를 찍기 위해..
옵젝씨에서 id타입은 클래스 인스턴스에 대한 포인터입니다. 옵젝씨의 클래스의 인스턴스는 모두 id 타입입니다. 일반적으로 메서드나 클래스에서 파라미터나 리턴 값으로 많이 사용하곤 합니다. 하지만 id 타입 메서드를 호출하는 것엔 주의해야 하는 점이 있는데요. 예를 들어 MyClass를 정의해줍니다. 그리고 YourClass를 정의합니다. 그리고 안에 saySomething이라는 메서드를 정의해주고 구현해줍니다. 메인 함수에서 myClass인스턴스 my1 그리고 my2를 생성했습니다. 둘 다 myClass인스턴스입니다. 이제 my1의 saySomething을 불러보도록 하겠습니다. 뭔가 이상하죠. 네 saySomething은 MyClass에 정의된 메서드가 아니라, YourClass에 정의된 메서드입니다...
재사용되는 테이블 뷰 셀을 만들 때 각각의 테이블 뷰 셀을 생성하는 것이 아닌 Xib파일을 만들어서 재사용되는 다른 곳에서 사용할 수 있도록 하면 훨씬 더 편리하고 효율적으로 사용할 수 있습니다. Xib파일을 생성하는 방법은 아래와 같이 테이블 뷰 셀 클래스를 생성할 때, also create XIB file의 체크박스도 체크해주면 됩니다. 저는 예시를 위해 간단하게 클래스명을 TableViewCell로 지정해보겠습니다. 테이블 뷰 셀을 생성하면 아래와 같이 나옵니다. 여기서 테이블 뷰 셀의 identifier을 테이블 뷰 셀 파일명과 동일하게 줍니다. (파일명과 동일하게 하는 이유는 CellReusable프로토콜을 활용하기 위해서입니다.) https://hyerios.tistory.com/61 이전 포..
조건문과 반복문은 프로그램 코드에 빠질 수 없는 구문입니다. 요즘 오브젝티브씨를 학습하고 있는데 스위프트랑 또 어떻게 다른지 알아보겠습니다. 먼저 if구문입니다. NSInteger a = 0; if (a == 0) { NSLog(@"a는 0이 맞습니다"); } else { NSLog(@"a는 0이 아닙니다"); } NSInteger a에 0을 넣어줬습니다. NSInteger은 플랫폼에 따라 32비트 64비트에 따라 int, long이 자동으로 결정됩니다. 그리고 a가 0인지 아닌지 판단해주도록 했습니다. a가 0이니 a는 0이 맞습니다가 출력됩니다. 이렇게 조건문을 작성해 참, 거짓을 구분할 수 있습니다. 또 다른 방법으로는 switch구문이 있습니다. NSInteger b = 0; switch (b) ..
스토리보드로 개발을 하면 IBOutlet을 연결해서 원하는 객체의 속성을 제어합니다. 이전에 로딩 뷰를 커스텀하게 만들어 사용했었는데 그때 IBOutlet Collection을 사용해 편리하게 객체의 속성을 제어했어서 IBOutlet Collection 사용법을 블로그에 공유하려 합니다. 먼저 제가 만든 커스텀한 로딩뷰는 이렇습니다. 3개의 UIView로 구성되어있으며 그 뷰는 차례로 커졌다 작아졌다를 반복합니다. 만약 IBOutlet을 사용하지 않았다면 아래와 같이 모든 점들에 대해 IBOutlet을 연결하고 속성을 제어해야 할 겁니다. 만약 코너를 둥글게 만들고 싶다고 치면 3개의 점들에 대해 접근한 후 radius값을 설정해줘야 합니다. 이는 코드가 길어지며 반복된 행위에 대해서 다 나열해서 코드를..
보통 앱에서 글을 입력하고 키보드에 있는 완료를 누르거나 빈 화면을 터치해서 키보드를 내립니다. 텍스트 필드를 누르면 자동적으로 키보드가 올라오지만 사라지게는 직접 작성해줘야 합니다. 왜냐하면 유저가 텍스트 필드를 탭 하면 "음 얘 글자 입력하겠네!!!!!!!!!!!" 파악하고 자동으로 키보드를 올라오게 하지만, 유저가 글자 입력을 완료하는 시점은 모르기 때문에 자동으로 키보드를 내려주진 못합니다. 그럼 키보드를 어떻게 내리는지 살펴봅시다. 1) UITextFieldDelegate 사용 먼저 해당 뷰컨트롤러에 UITextFieldDelegate 프로토콜을 준수해줍니다. 아래 이미지와 같이 UITextField를 생성했고 이름은 nameTextField로 정했습니다. 그리고 델리게이트를 사용하기 위해 뷰컨..
- Total
- Today
- Yesterday
- objc
- ReactiveX
- 스위프트UI
- SWIFT
- RX
- 책 추천
- string
- swiftUI
- 책
- 머신러닝
- swift5
- Xcode
- 독서
- Animation
- wwdc
- 책 후기
- ARC
- 딥러닝
- 알고리즘
- iOS SwiftUI
- 문자열
- 애니메이션
- 스위프트
- leetcode
- stanford SwiftUI
- rxswift
- ios
- Deep learning
- Algorithm
- objective-c
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |