我得到了大约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)
答案 0 :(得分:1)
在这种情况下,var
和let
之间的选择更多是可读性问题。
当阅读代码的人看到var
时,他们预计该变量的值会在某个时刻发生变化。类似地,当他们看到let
他们知道变量不能改变时。
这种分离在快速程序员的心中很强烈。在不打算更改的变量中使用var
可能会产生误导。你的程序运行得很好,但它给读者带来了一定的困惑,这就是你得到警告的原因。
我倾向于最初使用let
定义局部变量,然后根据需要更改为var
。
答案 1 :(得分:1)
在这种情况下,请使用let
。您基本上必须问自己,这些值latitude
,longitude
,latDelta
等是否会发生变化?如果答案是否定的,那么通过查看您的代码,很明显他们不会改变,然后使用let
。
这适用于所有情况,如果您定义了地图对象,UI对象或swift语言中的任何其他对象的值,则无关紧要。
最后,区分let
和var
不仅可以让其他程序员更加可读,从纯粹的开发角度来看,不可变的或let
值可以是主题由编译器优化。