극복 ReactiveSwift: 기본 요소(Part2)
10714 단어 SwiftReactiveCocoaReactiveSwiftiOS
이 보도에 관하여
이 문장은 Conquering ReactiveSwift: Primitives (Part 2)의 번역이다.
다음은 본문.
극복 ReactiveSwift: 기본 요소(Part2)
ReactiveSwift를 극복한 시리즈섹션 1에서 명령형 프로그래밍과 함수형 능동 프로그래밍으로 문제를 해결하는 방법의 차이를 연구했다.이 기사는 ReactiveSwift의 핵심이 될 것이다.우선 ReactiveSwift의 다양한 기본 요소부터 시작하겠습니다.
그럼 시작하겠습니다.
ReactiveSwift의 제작자들은 다음과 같이 말합니다.
ReactiveSwift는 조립하기 쉽고 선언적이며 유연한 기본 요소를 제공합니다.그리고 기본 요소는 시간치를 초월한 흐름이라는 기본 개념을 바탕으로 만들어졌다.
ReactiveSwift는 함수형 재활동 프로그래밍을 할 수 있는 강력한 기본 요소를 많이 가지고 있다.그런 기본 요소를 이해하려면 캐릭터에 따라 분류하는 것이 좋다.다음 이미지에 병합됨:
주: 그림은 번역자에서 인용한다.Priitive는 기본 요소라는 뜻입니다.
Source
지난번 글에서 논의한 바와 같이 프로그램 설계를 다시 사용하는 데는 일상적인 상태가 아니라 시스템을 시간에 따라 일련의 변화로 설계하는 것이다.Source 범주에 속하는 기본 요소의 책임은 이러한 일련의 변화의 생성과 전파이다.Source 카테고리의 기본 요소는 이벤트, 시그널, 시그널 프로듀서, 액션, 프로퍼티다.
1. Event
이벤트는 무슨 일이 일어났는지 표시합니다.흐름의 기본 단위는 Event입니다.이벤트는 4가지로 구성됩니다.
2. Signal
Signal은 단방향 Event의 흐름입니다.Signal이 흐르는 Event는 Observer에서 구독할 수 있습니다.시그널을 감시하더라도 시그널에는 부작용이 생기지 않는다.Signal에서 온 이벤트가 있습니다. 이 이벤트를 감시하고 있는 Observer에 한 번에 보냅니다.
3. SignalProducer
이름 그대로 Signal Producter는 Signal을 생산합니다.SignalProducter는 지연될 수 있는 작업을 패키지화합니다(중복될 수도 있음).시그널 프로듀서는 실행 지연이나 반복 가능한 작업을 봉인한다는 것이다.Signal Producter start 이후 새로운 Signal이 생산됩니다.이렇게 생성된 Signal의 값이 캡슐화된 작업의 실행 결과입니다.이처럼 시그널 프로듀서는 start가 먼저 필요해 cold라고 불린다.한편, 시그널은 warm이라고 불린다.
4. Action
동작도 임무 수행을 지연시키거나 반복할 때 사용된다.Action은 Signal Producter 작업을 캡슐화하여 Action이 더 높은 제어를 할 수 있도록 합니다.예를 들어 입력에서 출력을 제어할 수 있고 동작을 전환할 수 있다/불가능하다.또한 Action 상태는 Property 에서 제어를 다시 활성화할 수 있습니다.입력을 매개 변수로 Action을 실행하면 Action은 입력과 자신의 상태를 작업에 적용하고 출력을 Observer에 전달합니다.
5. Property
Property는 모니터링 가능한 상자에서 값을 유지합니다.저장된 값이 변경되면 Observer에 알립니다.Signal Produer와 Signal로 되돌아오는 게이트를 정의했기 때문에 수치의 변경을 감시할 수 있습니다.속성은 초기 값 또는 Signal, SignalProduer 또는 기타 Property를 통해 초기화됩니다.
아래의 그림은 각양각색의 기본 요소가 서로 관련되어 있음을 나타낸다.
주: 그림은 번역자에서 인용한다.
Consumer
컨슈머 카테고리에 속하는 기본 요소는 소스에서 배출된 이벤트에 따라 어떤 반응을 보이느냐에 따라 달라진다.이 유형에는 두 가지 기본 요소가 있다.Observer와 Mutable Property입니다.
1. Observer
Observer는 배출된 이벤트에서 수행된 작업을 패키지화합니다.이벤트를 매개 변수로 하는 벽장 얇은 자물쇠입니다.
2. MutableProperty
Mutable Property는 모니터링 가능한 상자에서 값을 유지합니다.이 점은 Property와 같습니다.시그널 프로듀서와 시그널의 게이트가 있다는 점도 마찬가지다.그러나 Property와 달리 유지된 값을 직접 변경할 수 있습니다.또한 BindingTargetProvider 프로토콜에 부합되기 때문에 Signal,SignalProducter 또는Property
<
~
(귀속산자)를 통해 값을 업데이트할 수 있습니다.Operators
Operatrs에서는 Consuumer가 Source를 받아들이는 방법을 지정합니다.ReactiveSwift에는 부작용, 변환, 매끄러움 등 풍부한 Operator가 있다.다음 보도에서 해설을 하겠습니다.
Scope
이 카테고리에 속하는 기본 요소는 Source와 Consuumer 간 상호작용의 유효기간을 결정한다.Disposable 및 Lifetime은 이 범주에 포함됩니다.
1. Disposable
Disposable는 메모리 관리 및 처리 취소의 구조입니다.Signal 모니터링을 시작하면 Disposable이 복원됩니다.이 Disposable (즉 dispose) 을 해제하면, Observer는 감시된 Signal에서 온 이벤트를 받아들이지 않습니다.시그널은 감시를 해제해도 영향을 받지 않는다.SignalProducter에서 Signal을 생성한 후 Disposable로 돌아갑니다.생산된 시그널을 없애기 위해 사용한 것이다.
2. Lifetime
라이프타임은 객체의 유효 기간을 나타냅니다.Lifetime는 UI 위젯이 있을 때 다른 알림만 감시할 때 Observer보다 대상이 길었을 때 작용합니다.
조합 사용
그럼 여기 보이는 기본 요소의 사용법을 이해하자.아래의 예를 생각해 보겠습니다.
입력한 텍스트가 10자 이상인 경우
textField
의button
만isEnable
true
1단계: Signal 정의
let signal = textField.reactive.continuousTextValues
textField
에 입력한 텍스트의 시그널 쓰기textField.reactive.continuousTextValues
.이것은 ReactiveCocoa의 일부분이지 ReactiveSwift의 것이 아니다.ReactiveCocoa는 코코아 프레임의 다양한 기능을 신선도를 유지하면서 ReactiveSwift의 기본 요소를 제공한다.2단계: Signal 변환
방금 정의한 Signal 선택 스트링 (즉
Optional<String>
) 을 배열합니다.map
의 Operator를 사용하여 Bool형 값을 배열된 시그널로 변환합니다.let transformedSignal = signal
.map { text in
text ?? "" }
.map { text in
text.count > 10
}
3단계: Signal 모니터링
이어 시그널을 감시하고 전환
button
의isEnabled
를 한다.지금부터 정의된 것은 <Bool, NoError>
형의 Observer이기 때문에 <Bool, NoError>
형의 시그널이나SignalProducter에서 값을 받을 수 있습니다.Observer가 정의되면 observe(:_)
에서 감시를 시작합시다.let observer = Signal<Bool, NoError>.Observer(value: { value in
button.isEnabled = value
})
let disposable = transformedSignal.observe(observer)
4단계:Signal 모니터링 해제
observe
Disposable 유형의 인스턴스를 반환합니다.이 실례는 감시를 해제하는 데 사용됩니다.disposable?.dispose()
가장 좋은 실천 방법 중 하나는 반의 모든 Observer의 감시를 해제하는 것이다.코드 전체가 이렇습니다.
// consumerを定義
let observer = Signal<Bool, NoError>.Observer(value: { value in
button.isEnabled = value
})
// sourceを定義
let signal = textField.reactive.continuousTextValues
let transformedSignal = signal
.map { text in
text ?? "" }
.map { text in
text.count > 10
}
// signalを受け取る
let disposable = transformedSignal.observe(observer)
// Scopeを制限する
disposable?.dispose()
참조 정보
이 링크에서 더 많은 지식을 얻을 수 있습니다.
https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/Documentation/ReactivePrimitives.md
총결산
이 글에서, 우리는 ReactiveSwift의 각종 요소와 함수형의 주동적인 프로그래밍을 어떻게 실천하는지 시험해 보았다.샘플 코드는 여기.에 있습니다.다음 기사에서는 시그널에 대해 자세히 다룰 예정이다.
끝까지 읽어 주셔서 감사합니다.
시리즈 내 링크 세트
Reference
이 문제에 관하여(극복 ReactiveSwift: 기본 요소(Part2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/taka1068/items/9e6ccce4297832817444텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)