【问题标题】:Using var vs. let in Swift 2 for maps [duplicate]在 Swift 2 中使用 var 与 let 进行地图 [重复]
【发布时间】:2015-10-14 20:00:21
【问题描述】:

我收到了大约 10 个警告信号,让我知道在这些情况下我应该考虑使用 let 代替 var。 Let 是一个常数,其中 var 变化。在这种情况下,改成 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)

【问题讨论】:

  • Swift 团队建议默认使用常量,仅当您确实需要在代码逻辑中更改此对象时才使用变量。所以默认情况下,在任何地方都使用let,除非你真的不能让它工作并且需要一个变量。 tl;dr 编译器是对的。

标签: ios swift swift2


【解决方案1】:

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

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

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

我最初倾向于使用let 定义局部变量,如果需要,稍后更改为var

【讨论】:

    【解决方案2】:

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

    这适用于所有情况,无论您为地图对象、UI 对象还是 swift 语言中的任何其他对象定义值都无关紧要。

    最后,letvar 之间的区别不仅可以提高其他程序员的可读性,从纯粹的开发角度来看,不可变或 let 值可以通过编译器进行优化。

    【讨论】:

      猜你喜欢
      • 2014-11-16
      • 2016-07-01
      • 2016-03-11
      • 1970-01-01
      • 2014-07-23
      • 2020-09-29
      • 2018-06-08
      • 2016-09-18
      • 1970-01-01
      相关资源
      最近更新 更多