2016-05-11 11 views
1

Ich mache kleines Projekt: Wenn Person in der Nähe gegebenen Koordinaten ist, gibt es "Hallo". Es funktioniert, aber ich denke, es ist zu viel Code, wenn ich so viele Variablen mache. Gibt es eine Möglichkeit, es zu organisieren oder das Hinzufügen von Koordinaten zu erleichtern? Ich habe versucht Array zu verwenden, kann es aber nicht zum Laufen bringen. Was könnte die beste Lösung sein? Ich bin der Swift-Syntax ziemlich neu. Jede Hilfe wird sehr geschätzt.Vereinfachen Code mit Arrays in Swift (Kernort)

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") 
} 
+0

Das sind nicht "viele Variablen". Oder kann dies zu mehr als zwei Standorten führen? Dann kann ein Array in der Tat eine gute Idee sein. – Thilo

+0

Swift kann alle diese Typen ableiten, also muss man ': CLLocationDistance' und ähnliches nicht buchstabieren. – Thilo

+0

Sie können die Speicherorte auch in einer PLIST-Datei als Array speichern und sie dann von dort herausziehen. Es wäre wahrscheinlich eine gute Idee, Ihr 'if' in eine eigene Funktion zu bringen, die Sie aufrufen, indem Sie die zwei erforderlichen Variablen übergeben. – Hodson

Antwort

1

Bei Bedarf können Sie einen Array aller nahen beieinander mit locations.filter({ location!.distanceFromLocation($0) < maxDistance }) jedoch erhalten können, für Ihren Zweck, ist dies der einfachste Weg ist, ich denken konnte:

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") 
} 
+1

'isEmpty' anstelle von' count> 0'? Am Ende werden Sie einfach '' resimplementieren – Sulthan

+0

@Sultan Sie sind richtig, enthält macht es einfacher, aktualisiert – Daniel

2

So würden Sie ein Array verwenden, um die Standorte zu halten.

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") 
} 
1

Dies ist, wie Sie bei der Implementierung eine Funktion, die einen bestimmten Ort, eine Liste von Adressen empfängt und Ihre Prüfung durchführt.

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