in Swift



Slack


Edge

Reactive Programming

Edge’s event API embraces the concepts of Functional Reactive Programming while still not having any external dependencies. The API is called Reactive and it is a modified version of ReactiveCocoa, but also inspired by RxSwift.

Why did we reimplement?

  • Edge should be easy to use out of the box.
  • Edge is optimized for maximum performance, which requires careful tuning of the internals.
  • The modified API is meant to be more similar to the familiar concepts of Futures and Promises.
  • We don’t want to be opinionated about any one framework. We want it to be easy to integate Edge with either ReactiveCocoa or RxSwift.

FRP, greatly simplies management of asynchronous events. The general concept is that we can build a spout which pushes out asynchronous events as they happen. Then we hookup a pipeline of transformations that operate on events and pass the transformed values along. We can even do things like merge streams in interesting ways! Take a look at some of these operations or watch this talk about how FRP is used at Netflix.

Installation

Edge is available as a Swift 3 package (No current 2.2 support). Simply add Edge as a dependency to your Swift Package.

import PackageDescription

let package = Package(
    name: "MyProject",
    dependencies: [
        .Package(url: "https://github.com/TheArtOfEngineering/Edge.git", majorVersion: 0, minor: 0)
    ]
)Copy the code

TCP

import Edge import Foundation let server = try! Tcp.server () try server.bind(host: "0.0.0.0", port: 50000) server.listen().startWithNext { connection in let read = connection.read() let strings = read.map { String(bytes:  $0, encoding: NSUTF8StringEncoding)! } strings.onNext { message in print("Client \(connection) says \"\(message)\"!" ) } strings.onFailed { error in print("Oh no, there was an error! \(error)") } strings.onCompleted { print("Goodbye \(connection)!" ) } read.start() } RunLoop.runAll()Copy the code