简体   繁体   中英

Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols

I am currently learning swift, I was trying to make a simple app that shows whether or not you are connected to the internet but I keep getting the following error:

Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols

This is the code:

struct ContentView: View {
    
    let NetworkMonitor = NWPathMonitor(requiredInterfaceType: .wifi)
    
    var body: some View {
        
        VStack {                                        //Line with the error
        
            Text("Network Check")
            
            NetworkMonitor.pathUpdateHandler = {path in
                if path.status == .satisfied {
                    Text("We are Connected")
                } else {
                    Text("We are not connected")
                }
            }
        }
    }
}

I had tried removing the VStack and the "Network Check" text but it sends another error on the var body: some View line:

Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type

Thanks

Since you are calling a function, you can't do it inside your view construction, try called it inside onAppear:

struct ContentView: View {

 let NetworkMonitor = NWPathMonitor(requiredInterfaceType: .wifi)
    @State var status = false
    var body: some View {
        VStack {
            Text("Network Check")
            if status {
                Text("We are Connected")
            } else {
                Text("We are not connected")
            }
            
        }.onAppear() {
           NetworkMonitor.pathUpdateHandler = { path in
            self.status = path.status == .satisfied
            }
        }
    }


}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM