Skip to content

Instantly share code, notes, and snippets.

View andersio's full-sized avatar

Anders Ha andersio

View GitHub Profile
infix operator <~
//func <~<T: Target, S: Source>(left: T, right: S) {
// print("Free Function")
//}
//func <~<S: Source>(left: BindingTarget, right: S) {
// print("Free Function 2")
//}
import XCTest
class ReplaceSubrangeTests: XCTestCase {
func testOneElementArray() {
var one = [1, 2, 3, 4, 5, 6, 7, 8]
self.measure {
for _ in 0 ..< 1000000 {
one.replaceSubrange(7 ..< 8, with: CollectionOfOne(8))

Unify Property types.

Since RAC 3.0, ReactiveSwift has a clear split between mutable properties and read-only properties, as represented by MutableProperty and AnyProperty. To achieve encapsulation, the pattern of wrapping a private MutableProperty in a public AnyProperty is usually encouraged.

public class Library {
	public private(set) lazy var books: Property<[Book]> = .init(self._books)
	private let _books = MutableProperty<[Book]>([])
}

However, it does not interoperate well with the native Swift experience of defining stored properties with access control modifiers.

The 2017 Roadmap

ReactiveSwift 1.0

It targets Swift 3.0.x. The tentative schedule of a Gold Master release is January 2017.

A Release Candidate would be released after an important bug fix and an API renaming PR are cleared, which should happen no later than Christmas 2016.

A point release is expected with performance optimizations.

ReactiveSwift 2.0

import XCTest
@testable import ReactiveSwift
import Result
class SignalProducerPerformanceTests: XCTestCase {
func testNormalStarting() {
let (signal, observer) = Signal<Int, NoError>.pipe()
let producer = SignalProducer(signal: signal)
let nested = (0 ..< 32).reduce(producer) { producer, _ in producer.testMap { $0 + 1 } }
import ReactiveSwift
import Result
import XCTest
class CwlSignalTests: XCTestCase {
// Credits:
// CwlSignal
//
// Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved.
//
import XCTest
import Result
import ReactiveSwift
class SyntheticTests: XCTestCase {
func testProducerStart() {
let property = MutableProperty(1).map { $0 + 1 }.map { $0 + 1 }.map { $0 + 1 }
let token = Lifetime.Token()
let lifetime = Lifetime(token)
import XCTest
import Result
import ReactiveSwift
class SyntheticTests: XCTestCase {
func testProducerStart() {
let property = MutableProperty(1).map { $0 + 1 }.map { $0 + 1 }.map { $0 + 1 }
let token = Lifetime.Token()
let lifetime = Lifetime(token)
import XCTest
import Result
import ReactiveSwift
class AtomicPerfTests: XCTestCase {
func test1() {
let a = Atomic<(Int, Int)?>(nil)
let i = Atomic<(Int, Int)?>((1, 1))
let obv = Observer<(), NoError> { _ in
import XCTest
import ReactiveSwift
import Result
class PerfTests: XCTestCase {
func testSignalSendEventOneObserver() {
let (signal, observer) = Signal<Int, NoError>.pipe()
signal.observe { _ in }
measure {