IP Multicast - Packet sent on button click issue

I've been reviewing docs here: https://developer.apple.com/news/?id=0oi77447

I'm new to swift, but trying to make sense of what's listed there to create a very simple iOS app that uses multicast IP 239.6.4.50, port 5890 on a "sender device" application to send a special payload in a single multicast UDP packet to multiple Receiver Devices (running a separate app) who are all obviously joined to that ip/port to receive the multicasts. I DO Have the Multicast entitlement and have configured (and verified) my Xcode project to ensure it's compiling the "Hello world" app with the multicast entitlements correctly. ...so that's not going to be an issue.

I can't get this code figure out to compile. ... just trying to send "Hello world" as the payload of a multicast packet when the button is clicked in the view controller.

Anyone here about to point out what I'm doing wrong?

code-block
import SwiftUI
import os
import Foundation
import Network
import UIKit


class multicastController {
    var multicastIP : NWEndpoint.Host =  "239.6.4.50"
    var multicastPort : NWEndpoint.Port = 5890
    let message = "Hello World"
    
    init() {
        
        let endpoints: [NWEndpoint] = [.hostPort(host: multicastIP, port: multicastPort)]
        guard let multicast = try? NWMulticastGroup(for: endpoints)
             else { fatalError("Multicast Group setup error") }
            
        let params: NWParameters = .udp
            params.allowLocalEndpointReuse = true
        let group = NWConnectionGroup(with: multicast, using: params)
            
       
        group.setReceiveHandler(maximumMessageSize: 16384, rejectOversizedMessages: true) { (message, data, isComplete) in
                if let data = data {
                    let dataString = String(data: data, encoding: .utf8)
                    print(message, dataString ?? "", isComplete)
                } else {
                    print(message, data ?? "", isComplete)
                }
                }            
       
        group.stateUpdateHandler = { (newState) in
                print("Group entered state \(String(describing: newState))")
            }
        group.start(queue: .main)
            
    } 
    
    func sendMulticastPacket() {
    group.send(content: data) { error in
            if let error = error {
                print(error.localizedDescription)
            } else {
                print("ok")
            }
        } 
    
    } 
}



struct ContentView: View {
    var session = multicastController()
    let message = "Hello World"
 
    var body: some View {
        VStack {
            Button(action: {
                session.sendMulticastPacket()
            }, label: {
                Text("Send Multicast Packet")
            }
        )}
    } 
}  


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

import SwiftUI
import os
import Foundation
import Network


class MulticastController {
    var multicastIP : NWEndpoint.Host =  "239.6.4.50"
    var multicastPort : NWEndpoint.Port = 5890
    let group: NWConnectionGroup
    init() {
        
        let endpoints: [NWEndpoint] = [.hostPort(host: multicastIP, port: multicastPort)]
        guard let multicast = try? NWMulticastGroup(for: endpoints)
        else { fatalError("Multicast Group setup error") }
        
        let params: NWParameters = .udp
        params.allowLocalEndpointReuse = true
        group = NWConnectionGroup(with: multicast, using: params)
        
        
        group.setReceiveHandler(maximumMessageSize: 16384, rejectOversizedMessages: true) { message, data, isComplete in
            if let data, let value = String(data: data, encoding: .utf8) {
                print(message, value, isComplete)
            } else {
                print(message, isComplete)
            }
        }
        
        group.stateUpdateHandler = { (newState) in
            print("Group entered state \(String(describing: newState))")
        }
        group.start(queue: .main)
        
    }
    
    func sendMulticastPacket(message: String) {
        let data = message.data(using: .utf8)
        group.send(content: data) { error in
            if let error = error {
                print(error.localizedDescription)
            } else {
                print("ok")
            }
        }
        
    }
}



struct ContentView: View {
    var session = MulticastController()
    let message = "Hello World"
    
    var body: some View {
        VStack {
            Button(action: {
                session.sendMulticastPacket(message: message)
            }, label: {
                Text("Send Multicast Packet")
            }
            )
        }
    }
}


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
Accepted Answer

Solid, @MobileTen Looks like I messed up the concept of declaring "group" as a type NWConnectionGroup above the init() and then incorrectly using "let" to define it as a constant within the init(). ...and a few other small things I see you touched up. Thank you.

IP Multicast - Packet sent on button click issue
 
 
Q