2016-08-04 4 views
1

jeder. Ich habe zwei Möglichkeiten zu codieren:Unterschied zwischen dem Überschreiben einer Klasse und dem Deklarieren von allem im Controller?

Ich habe eine mapView, die einige Variablen haben muss. Ich frage mich, was ist der beste Weg, es zu tun?

Erstens:

class UGOMapView: MKMapView, MKMapViewDelegate, CLLocationManagerDelegate { 

    let regionRadius: CLLocationDistance = 1000 
    var usrLocation: CLLocationManager! 
    var annotationView: MKAnnotationView! 


    func initUserLocation() { 
     if (CLLocationManager.locationServicesEnabled()) { 
      usrLocation = CLLocationManager() 
      usrLocation.delegate = self 
      usrLocation.requestAlwaysAuthorization() 
      usrLocation.requestLocation() 
     } 
    } 
} 

Da ist in meinem Drehbuch:

enter image description here

und in meinem Controller: @IBOutlet weak var mapView: UGOMapView!

Oder:

class MainViewController: UIViewController, MKMapViewDelegate, UITableViewDelegate, UITableViewDataSource, CLLocationManagerDelegate { 

    @IBOutlet weak var mapView: MKMapView! 
    let regionRadius: CLLocationDistance = 1000 
    var usrLocation: CLLocationManager! 
    var annotationView: MKAnnotationView! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     if (CLLocationManager.locationServicesEnabled()) { 
      usrLocation = CLLocationManager() 
      usrLocation.delegate = self 
      usrLocation.requestAlwaysAuthorization() 
      usrLocation.requestLocation() 
     } 
    } 

Dann in meinem Drehbuch:

enter image description here

(Ich habe mehr als eine Funktion in meinem mapView. Ich weiß nicht, ob die Funktionen dort Sache für die eine oder andere Weise ist?)

Antwort

1

Ihre erste Annäherung ist gut. Es ist, weil es Ihnen Codetrennung und einzelnen Punkt der Änderung gibt. Wenn Sie eine separate Klasse für Ihre Kartenansicht erstellen und davon ausgehen, dass ein Problem mit der Karte in Zusammenhang steht, , werden Sie ziemlich sicher sein, dass die Codezeilen, die das Problem verursachen, in dieser Klasse liegen. Wenn Sie mit kartenbezogenen Aktionen arbeiten möchten, können Sie sie hier auch behandeln. Ein weiterer Vorteil ist, dass Sie dieselbe Klasse für mehrere Kartenansichten verwenden können. Im Falle eines View-Controllers können Sie nicht den gleichen Code für eine andere Kartenansicht verwenden.

+0

Vielen Dank. Gilt das jedes Mal? Oder gibt es Kontexte, in denen der zweite Weg zum Code der beste ist? –

+0

Sie können für den zweiten Weg gehen, wenn Sie nicht viel Code auf der Karte haben und Sie Kartenansicht auf Einzelansicht-Controller verwenden. In diesem Fall ist es nicht falsch, den zweiten Ansatz zu verwenden, da Sie sicher sein werden, wo Sie die Kartenansicht verwendet haben, und Sie können leicht debuggen. Damit werden Ihre Zweifel ausgeräumt. –

1

Der Hauptunterschied zwischen Erster Ansatz und Zweiter Ansatz ist -Code Reuseablilty.

Erste Annäherung ist immer bessere Idee, denn wann immer Sie etwas mit dieser Klasse ändern oder ändern müssen, können Sie direkt zu dieser Klasse umleiten.

Wo im zweiten Ansatz wird es unüberschaubar, wenn Sie einige Änderungen hinzufügen müssen, die Sie verwirrend macht.

Lesen Sie dieses throughly: https://www.objc.io/issues/13-architecture/subclassing/

Sie werden bessere Idee erhalten, wenn Unterklasse und wann nicht.

+0

Also, auf jeden Fall wird der erste Ansatz immer der beste Weg sein, es zu tun? Keine Kontexte wichtig? –

Verwandte Themen