Skip to content

Instantly share code, notes, and snippets.

@YusukeHosonuma
Created April 10, 2016 08:17
Show Gist options
  • Save YusukeHosonuma/3c972ae610e75c16af09e41dd26c8ce1 to your computer and use it in GitHub Desktop.
Save YusukeHosonuma/3c972ae610e75c16af09e41dd26c8ce1 to your computer and use it in GitHub Desktop.
MySubject
//
// MySubject.swift
// RxSwiftSample
//
// Created by Yusuke on 4/10/16.
// Copyright © 2016 Yusuke. All rights reserved.
//
import Foundation
class MySubject<T> {
var value: T {
didSet {
observers.forEach{ $0(value) }
}
}
private var observers: [T -> ()] = []
init(value: T) {
self.value = value
}
func describe(observer: T -> ()) {
observers.append(observer)
}
}
//
// MySubjectTests.swift
// RxSwiftSample
//
// Created by Yusuke on 4/10/16.
// Copyright © 2016 Yusuke. All rights reserved.
//
import XCTest
@testable import RxSwiftSample
class MySubjectTests: XCTestCase {
override func setUp() {
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func testExample() {
let expectation1 = self.expectationWithDescription("callback 1")
let expectation2 = self.expectationWithDescription("callback 2")
let subject: MySubject<Int> = MySubject(value: 1)
// observer 1
subject.describe {
XCTAssertEqual($0, 2)
expectation1.fulfill()
}
// observer 2
subject.describe {
XCTAssertEqual($0, 2)
expectation2.fulfill()
}
// change observable
subject.value = 2
waitForExpectationsWithTimeout(0.3, handler: nil)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment