Search code examples
swiftreusabilitycode-reuse

How can I Reuse this code Passing a ViewController name


I am programming on swift language and I want to reuse this code passing the identifier as String and the page as the view controller name, but I am getting the error Use of undeclared type 'page', how can I achieve this? thanks

func toReuseSession(identifier: String, **page**: UIViewController){
            
    let mainStoryBoard = UIStoryboard(name: "Main", bundle: Bundle.main)
    
    guard let mainVC = mainStoryBoard.instantiateViewController(withIdentifier: identifier) as? **page** else {
        return
    }
    mainVC.modalPresentationStyle = .fullScreen
    present(mainVC, animated: true, completion: nil)
    
}

Solution

  • According to your function, You should be declared a generic type of UIViewController in such a way you can achieve your output. I have modified your function in a correct syntax, You can use that:-

     func toReuseSession<T:UIViewController>(identifier: String, page: T){
    
        let mainStoryBoard = UIStoryboard(name: "Main", bundle: Bundle.main)
    
        guard let mainVC = mainStoryBoard.instantiateViewController(withIdentifier: identifier) as? T else {
            return
        }
        mainVC.modalPresentationStyle = .fullScreen
        present(mainVC, animated: true, completion: nil)
    
    }
    

    Now you can call your function like that:-

     self.toReuseSession(identifier: "NewPasswordViewController", page: NewPasswordViewController()) 
    

    // "NewPasswordViewController" is in my case when I was checking it's working. You can change whatever ViewController wants to present.