Map with current location

Hi,

I watched a few lessons on Youtube and now tried to get hands-on experience. I am pursuing a little project which involves a tabbed app where I tried on the first page to create a map with a button showing the current location. Pretty basic actually. But somehow it just doesn’t work and I don’t know what’s the issue. Someone from CodewithChris told me this “I would suggest breaking up your app into smaller components and making sure each one works before going on to the next. Try outputting your location first before plotting it on a map etc so you can localize bugs easier.” I just don’t understand what she means by smaller components. I really appreciate all the help I can get. Below is the code as good as possible. Thanks in advance for every help.

"
import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {

@IBOutlet var textFieldForAddress: UITextField!
@IBOutlet var getDirectionsButton: UIButton!
@IBOutlet var map: MKMapView!

var locationManger = CLLocationManager()

override func viewDidLoad() {
super.viewDidLoad()

locationManger.delegate = self
locationManger.desiredAccuracy = kCLLocationAccuracyBest
locationManger.requestAlwaysAuthorization()
locationManger.requestWhenInUseAuthorization()
locationManger.startUpdatingLocation()

map.delegate = self

}

@IBAction func getDirectionsTapped(_ sender: Any) {
    getAddress()
}


func getAddress() {
    let geoCoder = CLGeocoder()
    geoCoder.geocodeAddressString(textFieldForAddress.text!) { (placemarks, error) in
        guard let placemarks = placemarks, let location = placemarks.first?.location
            else {
                print("No Location Found")
                return
        }
        print(location)
        self.mapThis(destinationCord: location.coordinate)
        
    }
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    print(locations)
}

func mapThis(destinationCord : CLLocationCoordinate2D) {
    
    let souceCordinate = (locationManger.location?.coordinate)!
    
    let soucePlaceMark = MKPlacemark(coordinate: souceCordinate)
    let destPlaceMark = MKPlacemark(coordinate: destinationCord)
    
    let sourceItem = MKMapItem(placemark: soucePlaceMark)
    let destItem = MKMapItem(placemark: destPlaceMark)
    
    let destinationRequest = MKDirections.Request()
    destinationRequest.source = sourceItem
    destinationRequest.destination = destItem
    destinationRequest.transportType = .automobile
    destinationRequest.requestsAlternateRoutes = true
    
    let directions = MKDirections(request: destinationRequest)
    directions.calculate { (response, error) in
        guard let response = response else {
            if error != nil {
                print("Something is wrong :(")
            }
            return
        }
        
      let route = response.routes[0]
      self.map.addOverlay(route.polyline)
      self.map.setVisibleMapRect(route.polyline.boundingMapRect, animated: true)
        
    }
    
    
}

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    let render = MKPolylineRenderer(overlay: overlay as! MKPolyline)
    render.strokeColor = .blue
    return render
}

}

I can explain what this means. As an example, you could:

  1. Make 2 tabs, each one with a different line of text
  2. Check that you can move between the two tabs
  3. Add a button to the page changes the text to “I pushed the button”
  4. Modify the button to change the text to the current location data
  5. Add another button to draw the map with fixed location data

You would check the functionality of each step before moving on to the next step. That way, you have a better idea of where you ran into trouble.