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) } }

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay