【问题标题】:Simplifying code using arrays in Swift (core location)在 Swift 中使用数组简化代码(核心位置)
【发布时间】:2016-05-11 09:57:24
【问题描述】:

我正在做一个小项目:如果人在给定坐标附近,它会输出“Hello”。它正在工作,但我认为如果我继续制作这么多变量,代码太多了。有没有办法组织它或使它更容易添加坐标。我尝试使用数组,但无法让它工作。什么可能是最好的解决方案?我对 Swift 语法非常陌生。非常感谢任何帮助。

let addressLocation:CLLocation = CLLocation(latitude: 37.334421, longitude: -122.037987)
let addressLocation2:CLLocation = CLLocation(latitude: 37.334395, longitude: -122.041173)


let meters:CLLocationDistance = location!.distanceFromLocation(addressLocation)
let meters2:CLLocationDistance = location!.distanceFromLocation(addressLocation2)


if (meters <= 50.00000000 || meters2 <= 50.0000000){
    print("Hello")
}else{
    print("No")
}

【问题讨论】:

  • 那些不是“很多变量”。或者这可以增长到两个以上的位置吗?那么数组可能确实是个好主意。
  • Swift 可以推断出所有这些类型,所以不需要拼写:CLLocationDistance 之类的。
  • 您还可以将位置保存在 plist 文件中作为数组,然后将它们从那里拉出。将if 放在它自己的函数中可能是个好主意,您可以调用它并传入两个必需的变量。

标签: ios xcode swift mapkit core-location


【解决方案1】:

这就是您将如何使用数组来保存位置。

var location = CLLocation(latitude: 37.334421, longitude: -122.037987)
var locations:[CLLocation] = [CLLocation(latitude: 37.334421, longitude: -122.037987),
                              CLLocation(latitude: 37.334395, longitude: -122.041173)]
var distances = locations.map{location.distanceFromLocation($0)}
let maxDistance = 50.0
if (distances.contains{$0 < maxDistance}) {
    print("Hello")
} else {
    print("No")
}

【讨论】:

    【解决方案2】:

    如果需要,您可以使用 locations.filter({ location!.distanceFromLocation($0) &lt; maxDistance }) 获取所有关闭位置的数组,但是,出于您的目的,这是我能想到的最简单的方法:

    var locations = [CLLocation(latitude: 37.334421, longitude: -122.037987),
                     CLLocation(latitude: 37.334395, longitude: -122.041173)]
    let maxDistance = 50.0
    
    if locations.contains({ location!.distanceFromLocation($0) < maxDistance }) {
        print("Hello")
    } else {
        print("No close locations")
    }
    

    【讨论】:

    • isEmpty 而不是count &gt; 0?最后你只是重新实现contains
    • @Sulthan 你是对的,包含使它更简单,更新
    【解决方案3】:

    这是您实现接收给定位置、地址列表并执行检查的功能的方式。

    func check(location:CLLocation?, addresses:[CLLocation]) {
        guard let location = location else { return }
        if (addresses.contains { $0.distanceFromLocation(location) < 50 }) {
            print("Hello")
        } else {
            print("No")
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多