2015-11-25 14 views
5

Trong câu hỏi được đăng here, người sử dụng hỏi:Tìm longitude gần nhất và vĩ độ trong mảng từ vị trí người dùng - iOS Swift

Tôi có một mảng đầy đủ các kinh độ và vĩ độ. Tôi có hai biến kép với vị trí người dùng của mình. Tôi muốn kiểm tra khoảng cách giữa các vị trí của người dùng với mảng của mình để xem vị trí nào gần nhất. Làm thế nào để tôi làm điều này?

Điều này sẽ nhận được khoảng cách giữa 2 vị trí nhưng cố gắng để hiểu cách tôi sẽ thử nghiệm nó với một loạt các địa điểm.

Đáp lại, ông nhận được đoạn mã sau:

NSArray *locations = //your array of CLLocation objects 
CLLocation *currentLocation = //current device Location 

CLLocation *closestLocation; 
CLLocationDistance smallestDistance = DBL_MAX; // set the max value 

for (CLLocation *location in locations) { 
    CLLocationDistance distance = [currentLocation distanceFromLocation:location]; 

    if (distance < smallestDistance) { 
     smallestDistance = distance; 
     closestLocation = location; 
    } 
} 
NSLog(@"smallestDistance = %f", smallestDistance); 

Tôi có cùng một vấn đề chính xác trong một ứng dụng tôi đang làm việc trên, và tôi nghĩ rằng đoạn mã này có thể làm việc một cách hoàn hảo. Tuy nhiên, tôi đang sử dụng Swift, và mã này nằm trong Objective-C.

Câu hỏi duy nhất của tôi là: nó sẽ trông như thế nào trong Swift?

Cảm ơn bạn đã được trợ giúp. Tôi là người mới đối với tất cả những điều này, và thấy đoạn mã này trong Swift có thể là một bước tiến lớn.

Trả lời

16
var closestLocation: CLLocation? 
var smallestDistance: CLLocationDistance? 

for location in locations { 
    let distance = currentLocation.distanceFromLocation(location) 
    if smallestDistance == nil || distance < smallestDistance { 
    closestLocation = location 
    smallestDistance = distance 
    } 
} 

print("smallestDistance = \(smallestDistance)") 

hoặc như là một chức năng:

func locationInLocations(locations: [CLLocation], closestToLocation location: CLLocation) -> CLLocation? { 
    if locations.count == 0 { 
    return nil 
    } 

    var closestLocation: CLLocation? 
    var smallestDistance: CLLocationDistance? 

    for location in locations { 
    let distance = location.distanceFromLocation(location) 
    if smallestDistance == nil || distance < smallestDistance { 
     closestLocation = location 
     smallestDistance = distance 
    } 
    } 

    print("closestLocation: \(closestLocation), distance: \(smallestDistance)") 
    return closestLocation 
} 
+0

Bây giờ tôi có thể sử dụng để so sánh với Mục tiêu-C. Nó hữu ích trong nhiều cách hơn một. Cảm ơn! – tsteve

+0

vui vì tôi có thể giúp! –

14

Đối Swift 3 Tôi đã tạo ra đôi chút mã này "chức năng":

let coord1 = CLLocation(latitude: 52.12345, longitude: 13.54321) 
let coord2 = CLLocation(latitude: 52.45678, longitude: 13.98765) 
let coord3 = CLLocation(latitude: 53.45678, longitude: 13.54455) 

let coordinates = [coord1, coord2, coord3] 

let userLocation = CLLocation(latitude: 52.23678, longitude: 13.55555) 

let closest = coordinates.min(by: 
{ $0.distance(from: userLocation) < $1.distance(from: userLocation) }) 
Các vấn đề liên quan