0Pricing
Swift Academy · 강의

PassthroughSubject와 CurrentValueSubject

주제를 명령형 코드와 Combine 데이터 처리 흐름 사이의 다리로 사용합니다.

PassthroughSubject와 CurrentValueSubject은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

주체는 게시자이면서 구독자이기도 합니다. 명령형 코드를 반응형 컴바인 처리 흐름에 연결합니다.

PassthroughSubject

```swift let subject = PassthroughSubject() subject.sink { print($0) }.store(in: &cancellables) subject.send("Hello") subject.send("World") // Hello, World ``` 나중에 구독한 구독자는 이미 전송된 값을 받지 못합니다.

CurrentValueSubject

```swift let subject = CurrentValueSubject(0) subject.sink { print($0) }.store(in: &cancellables) // prints 0 immediately subject.value = 1 // prints 1 subject.value = 2 // prints 2 ``` 현재 값을 저장하고 새 구독자에게 다시 전송합니다.

PassthroughSubject와 CurrentValueSubject 비교

• `PassthroughSubject` — 값을 저장하지 않으므로 나중에 구독한 구독자는 아무것도 받지 못합니다 • `CurrentValueSubject` — 최신 값을 저장하므로 나중에 구독한 구독자도 즉시 값을 받습니다

완료 전송하기

```swift subject.send(completion: .finished) // or: subject.send(completion: .failure(MyError.bad)) ``` 완료된 후에는 더 이상 값을 보낼 수 없습니다.

게시자로 사용하기

```swift let events: AnyPublisher = subject.eraseToAnyPublisher() // Expose only the Publisher interface, hide Subject ```

델리게이트에서 연결하기

```swift class LocationManager: NSObject, CLLocationManagerDelegate { let locationSubject = PassthroughSubject() func locationManager(_ m: CLLocationManager, didUpdateLocations l: [CLLocation]) { locationSubject.send(l.last!) } } ```

스레드 안전성

주체는 기본적으로 스레드로부터 안전하지 않습니다. 일관된 스레드에서 값을 보내거나 `receive(on:)`을 사용해 전환하십시오.

주체 테스트하기

```swift func testSearch() { let subject = PassthroughSubject() var results: [String] = [] subject.sink { results.append($0) }.store(in: &cancellables) subject.send("swift"); subject.send("ios") XCTAssertEqual(results, ["swift","ios"]) } ```

MVVM에서 컴바인 사용하기

```swift class SearchViewModel: ObservableObject { let querySubject = CurrentValueSubject("") @Published var results: [String] = [] init() { querySubject .debounce(for: 0.3, scheduler: RunLoop.main) .flatMap { search($0) } .assign(to: &$results) } } ```

빠른 확인

새 구독자에게 현재 값을 다시 전송하는 주체는 무엇입니까?

요약

핵심 내용: • `PassthroughSubject` — 값을 저장하지 않으며 다시 전송하지 않습니다 • `CurrentValueSubject` — 값을 저장하고 나중에 구독한 구독자에게 다시 전송합니다 • `send(completion:)`은 흐름을 종료합니다 • `eraseToAnyPublisher()`는 주체 인터페이스를 숨깁니다 • 주체는 명령형 → 반응형 코드를 연결합니다 다음 주제: 컴바인을 사용한 네트워킹

자주 묻는 질문

“PassthroughSubject와 CurrentValueSubject” 강의는 무료인가요?

네 — “PassthroughSubject와 CurrentValueSubject” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“PassthroughSubject와 CurrentValueSubject”에서 뭘 배우나요?

주제를 명령형 코드와 Combine 데이터 처리 흐름 사이의 다리로 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“PassthroughSubject와 CurrentValueSubject” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 게시자와 구독자
  2. 연산자: map, filter, combineLatest
  3. PassthroughSubject와 CurrentValueSubject
  4. Combine과 URLSession을 사용한 네트워킹
← Swift Academy(으)로 돌아가기