Skip to content

Instantly share code, notes, and snippets.

@stevestreza
Created June 16, 2021 20:24
Show Gist options
  • Save stevestreza/8310209de5b0fb2849721e196d5ee0aa to your computer and use it in GitHub Desktop.
Save stevestreza/8310209de5b0fb2849721e196d5ee0aa to your computer and use it in GitHub Desktop.
One pattern for getting rid of optionals in a xib-loaded UIViewController
import UIKit
class LoginViewController: UIViewController {
private class Controller {
let usernameField: UITextField
let passwordField: UITextField
init(usernameField: UITextField, passwordField: UITextField) {
self.usernameField = usernameField
self.passwordField = passwordField
}
func attemptLogin() {
// all nice and non-optional
let username = usernameField.text
let password = passwordField.text
// LoginManager.handleLogin(username: username, password: password)
}
}
private var controller: Controller? = nil
override func viewDidLoad() {
super.viewDidLoad()
guard
let usernameField = self.usernameField,
let passwordField = self.passwordField
else {
fatalError("View not initialized properly")
}
self.controller = Controller(
usernameField: usernameField,
passwordField: passwordField
)
}
@IBOutlet var usernameField: UITextField!
@IBOutlet var passwordField: UITextField!
@IBAction func login(_ sender: Any) {
controller?.attemptLogin()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment