2015-10-14 53 views
-1

我得到了大約10個警告標誌,讓我知道我應該考慮在這些情況下使用let代替var。讓var是變化的,這是一個常數。在這種情況下,會不會做出正確的決定?在Swift 2中使用var vs let讓地圖

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

Swift團隊建議默認情況下使用常量,並且只有在您確實需要在代碼邏輯中更改此對象時才使用變量。所以默認情況下,除非你真的不能使它工作並需要一個變量,否則使用'let'。 tl; dr編譯器是正確的。 – Moritz

回答

1

在這種情況下,選擇varlet之間是可讀性的更多問題。

當讀到您的代碼的人看到var時,他們預計該變量的值會在某個時刻發生變化。類似地,當他們看到let時,他們知道變量不能改變。

在快速程序員的腦海裏,這種分離是很強大的。在不會改變的變量中使用var可能會引起誤解。你的程序工作得很好,但它給讀者帶來了一定的困惑,這就是爲什麼你會收到警告。

我傾向於首先定義局部變量let,如果需要的話,稍後更改爲var

1

在這種情況下可以使用let。你基本上不得不問自己,這些值latitude,longitude,latDelta等等,會不會改變?如果答案是否定的,通過查看你的代碼很明顯他們不會改變,然後使用let

這適用於所有情況,如果您在swift語言中定義了地圖對象,UI對象或任何其他對象的定義值並不重要。

最後,不僅區分letvar之間的其他程序員借給自己更易讀,從,immutables或let值的純淨髮展來看,可以受到編譯器的優化。