[go: up one dir, main page]

DEV Community

Wesley de Groot
Wesley de Groot

Posted on • Originally published at wesleydegroot.nl on

Easy Publishers

Ever wondered how to create a simple publisher?

In this blog i'll try to show you the basics

Firstly we need to import the required frameworks

// Used for the ObservableObject import Combine // The easiest for publishers import SwiftUI

Published object

We're going to create a class what subclasses ObservableObject and contains a @Published variable.
(for this example it is also using a timer to update the value)

class MyObject: ObservableObject { // This published variable will be updated several times. @Published var y: String // Set a default value to y, and start the timer init() { // Set the value of y to Loading... y = "Loading..." // Run this function after 5 seconds on the main thread. DispatchQueue.main.asyncAfter(deadline: .now() + 5) { self.upd() // Update } } func upd() { // Set the value of y to Published World y = "Published World" // Tell the system that this ObservableObject class is updated. self.objectWillChange } }

(SwiftUI) View

struct MyView: View { // Define our object(class) as Observed @ObservedObject var v = MyObject() var body: some View { Text(v.y) // This will change automatically if y is changed } }

Full code



import Combine

import SwiftUI

class MyObject: ObservableObject {

@Published var y: String

init() {

y = "Loading..."

DispatchQueue.main.asyncAfter(deadline: .now() + 5) { self.upd() }

}

func upd() {

y = "Published World"

self.objectWillChange

}

}

struct MyView: View {

@ObservedObject var v = MyObject()

var body: some View { Text(v.y) } }

Top comments (0)