2016-05-11 3 views
1

私は少しのプロジェクトを行っています:人が与えられた座標に近い場合、 "Hello"を出力します。それは働いていますが、私は非常に多くの変数を作り続けているなら、それはあまりにも多くのコードだと思います。それを整理したり、座標を簡単に追加する方法はありますか?私は配列を使ってみましたが、動作させることはできません。最高の解決策は何でしょうか?私はSwiftの構文にはかなり新しいです。どんな助けでも大歓迎です。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") 
} 
+0

これらは「多くの変数」ではありません。または、これは2つ以上の場所に拡大できますか?それで、配列が実際に良いアイデアかもしれません。 – Thilo

+0

Swiftはこれらのすべてのタイプを推測できるので、 ':CLLocationDistance'などを記述する必要はありません。 – Thilo

+0

plistファイル内の位置を配列として保存し、そこから引き出すこともできます。 'if'を2つの必要な変数を渡すという独自の関数に入れることは、おそらく良い考えです。 'count> 0'の代わりに – Hodson

答えて

1

必要に応じ、あなたが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") 
} 
+1

' isEmpty'ですか?最後に、あなたは単に 'contains'を再実装しています – Sulthan

+0

@Sulthanあなたは正しいですが、 – Daniel

2

これは、配列を使用して場所を保持する方法です。

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

これは、あなたが実装する方法であります指定された場所を受け取る関数、アドレスのリスト、そしてあなたのチェックを実行します。

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