How can I get a Subscriber to subscribe to get only 4 elements from an array?

Hello,

I am trying to implement a subscriber which specifies its own demand for how many elements it wants to receive from a publisher.

My code is below:

import Combine

var array = [1, 2, 3, 4, 5, 6, 7]

struct ArraySubscriber<T>: Subscriber {
    typealias Input = T
    
    typealias Failure = Never
    
    let combineIdentifier = CombineIdentifier()
    
    func receive(subscription: any Subscription) {
        subscription.request(.max(4))
    }
    
    func receive(_ input: T) -> Subscribers.Demand {
        print("input,", input)
        return .max(4)
    }
        
    func receive(completion: Subscribers.Completion<Never>) {
        switch completion {
            case .finished:
                print("publisher finished normally")
            case .failure(let failure):
                print("publisher failed due to, ", failure)
        }
    }
}

let subscriber = ArraySubscriber<Int>()

array.publisher.subscribe(subscriber)

According to Apple's documentation, I specify the demand inside the receive(subscription: any Subscription) method, see link.

But when I run this code I get the following output:

input, 1 input, 2 input, 3 input, 4 input, 5 input, 6 input, 7 publisher finished normally

Instead, I expect the subscriber to only "receive" elements 1, 2, 3, 4 from the array.

How can I accomplish this?

How can I get a Subscriber to subscribe to get only 4 elements from an array?
 
 
Q