大家。我有两种编码方式:
我有一个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中有多个函数。我不知道那里的函数是否有问题?)
答案 0 :(得分:1)
您的第一种方法很好。这是因为它为您提供了代码分离和单点修改。如果您为地图视图创建单独的类,并假设任何问题与地图相关,您将非常确定导致问题的代码行将在此类中。此外,如果您想处理与地图相关的操作,可以在此处理它们。另一个好处是您可以将同一个类用于多个地图视图。对于视图控制器,您不能将相同的代码用于其他地图视图。
答案 1 :(得分:1)
第一种方法与第二种方法之间的主要区别在于代码重用。
第一种方法总是更好的主意,因为无论何时您需要修改或更改该类的任何内容,您都可以直接重定向到该类。
当您需要添加一些令您感到困惑的更改时,在第二种方法中,它变得无法管理。
仔细阅读: https://www.objc.io/issues/13-architecture/subclassing/
您将更好地了解何时进行子类化,何时不进行。