使用var vs. let在Swift 2中为地图

时间:2015-10-14 20:00:21

标签: ios swift swift2

我得到了大约10个警告标志,让我知道在这些情况下我应该考虑使用let代替var。设为常数,其中var发生变化。在这种情况下,会改变让我们做出正确的决定吗?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    var latitude: CLLocationDegrees = 50.0358

    var longitute: CLLocationDegrees = 19.1783

    var latDelta: CLLocationDegrees = 0.5

    var longDelta: CLLocationDegrees = 0.5

    var span: MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta)

    var location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitute)

    var region: MKCoordinateRegion = MKCoordinateRegionMake(location, span)

    mapView.setRegion(region, animated: true)

    var annotation = MKPointAnnotation()

    annotation.coordinate = location

    annotation.title = "Auschwiz"

    annotation.subtitle = "German Nazi concentration camp."

    mapView.addAnnotation(annotation)

    var uilpgr = UILongPressGestureRecognizer(target: self, action: "action:")

    uilpgr.minimumPressDuration = 2

    mapView.addGestureRecognizer(uilpgr)

2 个答案:

答案 0 :(得分:1)

在这种情况下,varlet之间的选择更多是可读性问题。

当阅读代码的人看到var时,他们预计该变量的值会在某个时刻发生变化。类似地,当他们看到let他们知道变量不能改变时。

这种分离在快速程序员的心中很强烈。在不打算更改的变量中使用var可能会产生误导。你的程序运行得很好,但它给读者带来了一定的困惑,这就是你得到警告的原因。

我倾向于最初使用let定义局部变量,然后根据需要更改为var

答案 1 :(得分:1)

在这种情况下,请使用let。您基本上必须问自己,这些值latitudelongitudelatDelta等是否会发生变化?如果答案是否定的,那么通过查看您的代码,很明显他们不会改变,然后使用let

这适用于所有情况,如果您定义了地图对象,UI对象或swift语言中的任何其他对象的值,则无关紧要。

最后,区分letvar不仅可以让其他程序员更加可读,从纯粹的开发角度来看,不可变的或let值可以是主题由编译器优化。