Skip to content

Instantly share code, notes, and snippets.

@peteranny
peteranny / SimpleTableViewController.swift
Last active March 6, 2024 05:37
Combine-version twin of the event-driven binding to the data source of a table view. Referenced by: https://medium.com/@tingyishih/mvvm-data-binding-with-rxswift-single-interface-practice-1a7f5f1a655d
import Combine
import CombineCocoa // To allow publisher extensions such as button.tapPublisher
import CombineDataSources // To allow the event-driven data source of the table view
import CombineExt // To enable the Combine extension Publishers.withLatestFrom. Ref: https://github.com/CombineCommunity/CombineExt
import UIKit
class SimpleTableViewController: UITableViewController {
private let viewModel = SimpleTableViewModel()
private var cancellables: [AnyCancellable] = []
@peteranny
peteranny / SimpleViewController.swift
Last active March 13, 2024 03:43
Combine-version twin of the MVVM data binding pattern in RxSwift. Referenced by: https://medium.com/@tingyishih/mvvm-data-binding-with-rxswift-single-interface-practice-1a7f5f1a655d
import Combine
import CombineCocoa // To allow publisher extensions such as button.tapPublisher
import UIKit
class SimpleViewController: UIViewController {
private let viewModel = SimpleViewModel()
private var cancellables: [AnyCancellable] = []
private let button = UIButton()
override func viewDidLoad() {
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let label: UILabel = {
let label = UILabel()
label.frame.origin = CGPoint(x: 100, y: 100)
label.text = HelloWorld().hello(to: "World")
/* Use your asset */
public class HelloWorld {
let greet = "Hello"
public init() {}
public func hello(to whom: String) -> String {
return "\(greet) \(whom)"
}
public var helloColor: UIColor? {
import UIKit
import HelloWorldSDK
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let label: UILabel = {
let label = UILabel()
use_frameworks!
target 'HelloWorldExampleApp' do
platform :ios, '12.1'
pod 'HelloWorldSDK', :path => '.'
end
Pod::Spec.new do |s|
s.name = "HelloWorldSDK"
s.version = "0.0.1"
s.summary = "iOS SDK for Hello World"
s.description = "iOS SDK for Hello World, including example app"
s.homepage = "https://github.com/peteranny/"
s.license = "MIT"
s.author = "peteranny"
s.platform = :ios, "9.0"
s.swift_version = "4.2"
import XCTest
@testable import HelloWorldSDK
class HelloWorldSDKTests: XCTestCase {
func testHelloWorld() {
let hw = HelloWorld()
// test public method
XCTAssertEqual(hw.hello(to: "World"), "Hello World")
public class HelloWorld {
let hello = "Hello"
public init() {}
public func hello(to whom: String) -> String {
return "Hello \(whom)"
}
}
import PromiseKit
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let p = Promise.value(0) // A useless promise just for test