Functional reactive programming (FRP) is a programming paradigm that uses functional programming concepts like map, reduce, and filter to build reactive programs that can respond asynchronously to changing data over time. It involves working with streams of events, manipulating streams using functions, and combining multiple streams. ReactiveSwift is an FRP framework for iOS that represents events as signals that can be observed and transformed without side effects. It distinguishes between signals that represent real-time events and signal producers that represent asynchronous tasks.
5. Wikipedia
Functional reactive programming (FRP) is a programming
paradigm for reactive programming (asynchronous dataflow
programming) using the building blocks of functional
programming (e.g. map, reduce, filter).
@EliSawic
11. Imperative
let array = [0, 1, 2, 3, 4, 5]
var evenNumbers = [Int]()
for element in array {
if element % 2 == 0 {
evenNumbers.append(element)
}
}
@EliSawic
38. Presentation
let (presentation, presentationObserver) = Signal<Idea, NoError>.pipe()
let content = "This presentation is a signal"
let idea = Idea(content: content, quality: .Great)
presentationObserver.send(value: idea)
presentationObserver.sendCompleted()
@EliSawic
40. Only great ideas
let greatIdeas = presentation.filter { idea in
idea.quality == .Great
}
greatIdeas.observeValues { greatIdea in
remember(idea: greatIdea)
}
@EliSawic
47. Work with presentation
runPresentation().startWithValues { idea in
print(idea)
}
runPresentation().startWithSignal { (signal, _) in
signal.observeValues({ idea in
print(idea)
})
signal.observeCompleted {
print("Finally...")
}
}
@EliSawic
63. Is name valid?
let isValidNameSignal = nameSignal.map { (name) -> Bool in
return name.characters.count > 2
}
@EliSawic
64. Is surname valid?
let isValidSurnameSignal = surnameSignal.map { (surname) -> Bool in
return surname.characters.count > 2
}
@EliSawic
65. Is mail valid?
let isValidMailSignal = mailSignal.map { (mail) -> Bool in
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailTest.evaluateWithObject(mail)
}
@EliSawic