覆盖 class 和在控制器中声明所有内容之间的区别?
Difference between overriding a class and declaring everything in controller?
各位。我有两种编码方式:
我有一个 mapView,它需要一些变量。我想知道最好的方法是什么?
第一个:
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()
}
}
}
然后在我的故事板中:
在我的控制器中:@IBOutlet weak var mapView: UGOMapView!
或者:
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()
}
}
然后在我的故事板中:
(我的 mapView 中有多个函数。我不知道那里的函数是否有问题?)
你的第一种方法很好。因为,它给了你代码分离和单点修改。如果您为地图视图创建单独的 class,并且假设任何问题都与地图相关,您将非常确定导致问题的代码行将在此 class。另外如果你想处理地图相关的动作,你可以在这里处理它们。另一个好处是 您可以对多个地图视图使用相同的 class。对于视图控制器,您不能对其他地图视图使用相同的代码。
第一种方法和第二种方法之间的主要区别是代码重用性。
第一种方法总是更好的主意,因为每当您需要使用 class 修改或更改任何内容时,您都可以直接重定向到 class。
在第二种方法中,当您需要添加一些让您感到困惑的更改时,它变得难以管理。
通读这篇文章:
https://www.objc.io/issues/13-architecture/subclassing/
您会更清楚什么时候该class 什么时候不该。
各位。我有两种编码方式:
我有一个 mapView,它需要一些变量。我想知道最好的方法是什么?
第一个:
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()
}
}
}
然后在我的故事板中:
在我的控制器中:@IBOutlet weak var mapView: UGOMapView!
或者:
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()
}
}
然后在我的故事板中:
(我的 mapView 中有多个函数。我不知道那里的函数是否有问题?)
你的第一种方法很好。因为,它给了你代码分离和单点修改。如果您为地图视图创建单独的 class,并且假设任何问题都与地图相关,您将非常确定导致问题的代码行将在此 class。另外如果你想处理地图相关的动作,你可以在这里处理它们。另一个好处是 您可以对多个地图视图使用相同的 class。对于视图控制器,您不能对其他地图视图使用相同的代码。
第一种方法和第二种方法之间的主要区别是代码重用性。
第一种方法总是更好的主意,因为每当您需要使用 class 修改或更改任何内容时,您都可以直接重定向到 class。
在第二种方法中,当您需要添加一些让您感到困惑的更改时,它变得难以管理。
通读这篇文章: https://www.objc.io/issues/13-architecture/subclassing/
您会更清楚什么时候该class 什么时候不该。