在 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) < 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 > 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 中使用数组简化代码(核心位置)的主要内容,如果未能解决你的问题,请参考以下文章