在 Swift 中使用数组简化代码(核心位置)

Posted

技术标签:

【中文标题】在 Swift 中使用数组简化代码(核心位置)【英文标题】:Simplifying code using arrays in Swift (core location) 【发布时间】: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 放在它自己的函数中可能是个好主意,您可以调用它并传入两个必需的变量。 【参考方案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.maplocation.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")
    

【讨论】:

以上是关于在 Swift 中使用数组简化代码(核心位置)的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2 核心位置不起作用

SWIFT:核心位置返回 nil - 如何调用 didUpdateLocations?

如何使用swift获取appdelegate中的当前位置

Swift - 如果未授予核心位置请求权限

如何使用 Mapkit (Swift) 去用户位置

如何在swift 3.0中计算用户从当前位置行进的距离