Skip to content

Instantly share code, notes, and snippets.

@agnosticdev
Created May 10, 2017 20:28

Revisions

  1. agnosticdev created this gist May 10, 2017.
    115 changes: 115 additions & 0 deletions MasterViewController.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,115 @@
    import Alamofire
    import UIKit

    class MasterViewController: UITableViewController {

    @IBOutlet weak var titleImageView: UIImageView!

    var detailViewController: DetailViewController? = nil
    var objects = NSMutableArray()
    var networkReachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.apple.com")
    var onlineStatus: Bool = false
    var timer: Timer!

    // MARK: - View Lifecycle

    override func awakeFromNib() {
    super.awakeFromNib()

    navigationItem.titleView = titleImageView
    }

    override func viewDidLoad() {
    super.viewDidLoad()

    if let split = splitViewController {
    let controllers = split.viewControllers

    if
    let navigationController = controllers.last as? UINavigationController,
    let topViewController = navigationController.topViewController as? DetailViewController
    {
    detailViewController = topViewController
    }
    }

    setupReachabilityManager()
    startNetworkTimer()
    }

    override public func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    stopNetworkTimer()
    }

    // MARK: - Instance Methods
    func setupReachabilityManager() {
    networkReachabilityManager?.listener = { [unowned self] status in
    switch status {
    case .notReachable:
    self.onlineStatus = false

    case .reachable(_), .unknown:
    self.onlineStatus = true
    }
    }

    networkReachabilityManager?.startListening()
    }

    func startNetworkTimer() {

    timer = Timer.scheduledTimer(timeInterval: 1.0,
    target: self,
    selector: #selector(networkTimerCallback),
    userInfo: nil,
    repeats: true)
    }

    func stopNetworkTimer() {
    timer.invalidate()
    }

    @objc public final func networkTimerCallback() {
    print("Online Status: \(self.onlineStatus)")
    }

    // MARK: - UIStoryboardSegue

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if
    let navigationController = segue.destination as? UINavigationController,
    let detailViewController = navigationController.topViewController as? DetailViewController
    {
    func requestForSegue(_ segue: UIStoryboardSegue) -> Request? {
    switch segue.identifier! {
    case "GET":
    detailViewController.segueIdentifier = "GET"
    return Alamofire.request("https://httpbin.org/get")
    case "POST":
    detailViewController.segueIdentifier = "POST"
    return Alamofire.request("https://httpbin.org/post", method: .post)
    case "PUT":
    detailViewController.segueIdentifier = "PUT"
    return Alamofire.request("https://httpbin.org/put", method: .put)
    case "DELETE":
    detailViewController.segueIdentifier = "DELETE"
    return Alamofire.request("https://httpbin.org/delete", method: .delete)
    case "DOWNLOAD":
    detailViewController.segueIdentifier = "DOWNLOAD"
    let destination = DownloadRequest.suggestedDownloadDestination(
    for: .cachesDirectory,
    in: .userDomainMask
    )
    return Alamofire.download("https://httpbin.org/stream/1", to: destination)
    default:
    return nil
    }
    }

    if let request = requestForSegue(segue) {
    detailViewController.request = request
    }
    }
    }
    }