рд╕реНрд╡рд┐рдлреНрдЯ рдХрдВрдмрд╛рдЗрди рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рд╕реЗрд╡ рдХрд░рдирд╛ред рднрд╛рдЧ 2

рдбреЗрдЯрд╛ рдУрд░рд┐рдПрдВрдЯреЗрдб рдХрдВрдмрд╛рдЗрди





рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдиреНрдирдд рдкрд╛рдареНрдпрдХреНрд░рдо "рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░" рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред





рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдкреНрд░рдХрд░рдг, рд╣рдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдореВрд▓реНрдпреЛрдВ, рдЬрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдСрдкрд░реЗрдЯрд░ (рдХреА рдПрдХ рдзрд╛рд░рд╛ рдореЙрдбрд▓рд┐рдВрдЧ delay) рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рд╕реЗ рдЬреБрдбрд╝рд╛ рдерд╛ ред

рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдХреБрдЫ рдФрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдПрдВрдЧреЗ, CodeableрдФрд░ рдЕрдВрдд рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрдВрдмрд╛рдЗрди рдкреНрд░рдХрд╛рд╢рдХ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред



рд╕рдВрдЪрд╛рд▓рдХ рдкреНрд░рдХрд╛рд░


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдореЙрдбрд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрдЯрд░ рдореМрдЬреВрдж рд╣реИрдВред

ReactiveX рд╕рд╛рдЗрдЯ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрднрдЧ 10 рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рддреЛрдбрд╝рддреА рд╣реИ: рдирд┐рд░реНрдорд╛рдг, рдкрд░рд┐рд╡рд░реНрддрди, рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ, рд╕рдВрдпреЛрдЬрди, рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ, рд╕рд╣рд╛рдпрдХ, рд╕рд╢рд░реНрдд, рдЧрдгрд┐рддреАрдп / рд╕рдореБрдЪреНрдЪрдп, рдмреИрдХрд╕реНрдкреЗрд╕, рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп-рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдФрд░ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп (рдЯреВ) рд░реВрдкрд╛рдВрддрд░рдг рдСрдкрд░реЗрдЯрд░ред рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ ReactiveX рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИред
рдиреЛрдЯ: рдЖрдк RxSwift рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпрдХреНрд╖ RxSwift рдореЗрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдкреНрд░рдХрд╛рд╢рдХ рдХрдореНрдмрд╛рдЗрди рдореЗрдВред
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ delay, рдЬреЛ рд╕рд╣рд╛рдпрдХ ( utility) рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдЖрдЬ рд╣рдо рджреЛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ ( filtering) рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ ред



рдлрд╝рд┐рд▓реНрдЯрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ


рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдСрдкрд░реЗрдЯрд░ рдкреНрд░рд╡рд╛рд╣ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рднреА рдпрд╛ рдХреБрдЫ (рдпрд╛ рдХреЛрдИ рдирд╣реАрдВ) рдХреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдЧреЗ рдХреА рдУрд░ рдмрдврд╝рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред

dropFirst


dropFirstрдкрд╣рд▓реЗ nрддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ ред рд╣рдо OperatorрдЕрдкрдиреА рд╕рд╛рджрдЧреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдмрд╕ рдЗрд╕реЗ рдЕрдкрдиреА рджреБрд╢реНрдордиреА рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ред

enum Operator {
 case delay(seconds: Double)
 case dropFirst(count: Int)
}

рд╣рдо рдЗрд╕ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреЗрд╕ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдХрд╛рд╢рдХ рдореЗрдВ рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

extension Operator {func applyPublisher<T>(_ publisher: AnyPublisher<T, Never>) -> AnyPublisher<T, Never> { 
switch self {
   case .dropFirst(let count):
       return publisher.dropFirst(count).eraseToAnyPublisher()
 //   
 }}}

рдЕрдм рдСрдкрд░реЗрдЯрд░ dropFirstрдХреЛ рдСрдкрд░реЗрдЯрд░ рд╕реВрдЪреА рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдмрдЪрдд dropFirstрдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рдорд╛рди рд╣реИ delayред рд╢рд╛рдпрдж рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╕рд╣рд╛рдпрдХ рдСрдкрд░реЗрдЯрд░реЛрдВ рд╕реЗ рдЗрддрдирд╛ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдРрд╕рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗрдВ, рдПрдХ рдФрд░ рдмрдпрд╛рди рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

рдлрд╝рд┐рд▓реНрдЯрд░


рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд dropFirst, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдорд╛рдирджрдВрдб рд╣реИрдВ, рдСрдкрд░реЗрдЯрд░ filterрдПрдХ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓рд╛ рд╣реИред рд╣рдо рдПрдХ рдмрдВрдж рдХреЛ рдХреИрд╕реЗ рдмрдЪрд╛рддреЗ рд╣реИрдВ рдФрд░ рдлреИрд▓рд╛рддреЗ рд╣реИрдВ?

filter(_:)

рджрд┐рдП рдЧрдП рдХреНрд▓реЛрдЬрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

developer.apple.com


рдЖрдЗрдП рд╡рд┐рдзрд┐ рдкрд░ filterрдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ ред

func filter(_ isIncluded: @escaping (Self.Output) -> Bool) -> Publishers.Filter<Self>

рдЗрд╕рдХрд╛ рд╕рдорд╛рдкрди isIncludedрдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдкреНрд░рдХрд╛рд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдп рджреЗрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдлрд╛рдЙрдВрдбреЗрд╢рди рдореЗрдВ рдХреБрдЫ рднреА рд╣реИ рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдореВрд▓реНрдп рджреЗрддрд╛ рд╣реИ? рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ?

NSPredicate рдХреЗ рд╕рд╛рде рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ


рдЬрд╡рд╛рдм рд╣реИ NSPredicateред рдпрджрд┐ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдорд╛рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ NSPredicateрдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЖрдЗрдП рдЬрд╛рд░реА рд░рдЦреЗрдВ рдФрд░ filterрд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред

enum Operator {
 case delay(seconds: Double)
 case dropFirst(count: Int)
 case filter(expression: String)
}

рд╣рдореЗрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рднрд╛рд╡реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП %d !=3рдпрд╛ %@ != тАЬDтАЭ; рдЗрд╕рд▓рд┐рдП, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░ рд╣реИред рдЗрд╕реА рддрд░рд╣, рд╣рдореЗрдВ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ filter рдХреЛ рдкреНрд░рдХрд╛рд╢рдХ рдХреЗ рдкрд╛рд╕ рд▓реЗ рдЬрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред

extension Operator {
func applyPublisher<T>(_ publisher: AnyPublisher<T, Never>) -> AnyPublisher<T, Never> { 
 switch self {
   case .filter(let expression):
   return publisher.filter { value in
               NSPredicate(format: expression,
                           argumentArray: [value])
                .evaluate(with: nil) }.eraseToAnyPublisher()
      
     //   
 }}}

рдЬреИрд╕рд╛ рдХрд┐ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рд╣рдо NSPredicateрдкреНрд░рдХрд╛рд╢рдХ рд╕реЗ рднреЗрдЬреЗ рдЧрдП рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рднреЗрдЬрддреЗ рд╣реИрдВ ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ NSPredicateрддрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдХреБрдЫ рд╕рдВрд╢реЛрдзрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрдм рднреА рдЬрдм рдорд╛рди рдЯреБрдкрд▓реНрд╕ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдорд╛рдирддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЖрдо рд╣реИред рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдПрдВрдЧреЗ рдЬрдм рд╣рдо рд╕рдВрдпреБрдХреНрдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЗрд╕ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрдердиреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдЪреНрдЪ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рд╕рдВрдЦреНрдпрд╛ 3 рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢рдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЕрдЧрд▓реЗ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ: рд╕реЗрд╡рд┐рдВрдЧ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдСрдкрд░реЗрдЯрд░реНрд╕, рдореИрдк рдПрдВрдб рд╕реНрдХреИрди


рдЬреАрдЖрдИрдПрдл рдбреЗрдореЛ рдореЗрдВ, рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╕реВрдЪреА рдмрд╣реБрдд рдЦрд╛рд▓реА рд╣реИред рдЕрдЧрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рднрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ: рдкрд░рд┐рд╡рд░реНрддрди рдСрдкрд░реЗрдЯрд░, mapрдФрд░ scanред
рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдЗрд╕ рд╕рдВрдпреЛрдЬрди-рдЬрд╛рджреВ-рд╕реНрд╡рд┐рдлреБрдИ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрдВрдмрд╛рдЗрдВрдб-рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рджрд┐рди рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред

All Articles