Passing delegate/protocol as function parameter


public protocol UploadDelegate: AnyObject {}

class NetworkManager: UploadDelegate {}

class A {
      B().abc(uploadDelegate:NetworkManager() )
}

class B {
    func abc (uploadDelegate: UploadDelegate) {
             C().efg(uploadDelegate:uploadDelegate )
     }
}

class C {
     func efg (uploadDelegate: UploadDelegate) {
        D().hij(uploadDelegate:uploadDelegate )
      }
}

class D {

 func hij (uploadDelegate: UploadDelegate) {
           uploadDelegate.func()
    }
}

Can we pass the protocol/delegate as a func parameter? If yes, I believe its a weak property.

Passing delegate/protocol as function parameter
 
 
Q