Swift4: я хочу переставить JSON, полученный API, в ближайшем порядке из моего местоположения - PullRequest
0 голосов
/ 20 сентября 2018

Спасибо за просмотр моего вопроса.

Мой поток iOS-приложений.Когда вы нажимаете кнопку категории, данные магазина в этой категории будут возвращены в формате JSON.Широта и долгота включены в данные магазина.Исходя из этой широты и долготы, я хотел бы переставить содержимое JSON, чтобы вы могли отображать магазин по порядку с моей позиции.

Я ищу пример кода, но не смог его найти.

пожалуйста, скажите мне.

спасибо.

JSON DATA

{
"id": 1,
"name": "Barth day",
"created_at": "2018-08-09 10:00:58",
"updated_at": "2018-08-09 10:00:58",
"stores": [
    {
        "id": 1,
        "name": "Pink Cafe Tokyo",
        "location": "Tokyo",
        "price": "1000~3000",
        "open_time": "10:00-14:00",
        "closed_day": "月曜日",
        "created_at": "2018-08-09 10:03:52",
        "updated_at": "2018-08-09 10:03:52",
        "tellNumber": "09012345678",
        "lat": 35.662163,
        "lng": 139.744629,
        "pivot": {
            "store_id": 1,
            "category_id": 1
        },
        "tags": [
            {
                "id": 1,
                "name": "Sweets",
                "created_at": "2018-08-09 10:00:58",
                "updated_at": "2018-08-09 10:00:58",
                "pivot": {
                    "tag_id": 1,
                    "store_id": 1
                }
            },
            {
                "id": 13,
                "name": "Pink Cafe",
                "created_at": "2018-08-09 10:00:58",
                "updated_at": "2018-08-09 10:00:58",
                "pivot": {
                    "tag_id": 1,
                    "store_id": 13
                }
            },
            {
                "id": 14,
                "name": "Concept Cafe",
                "created_at": "2018-08-09 10:00:58",
                "updated_at": "2018-08-09 10:00:58",
                "pivot": {
                    "tag_id": 1,
                    "store_id": 14
                }
            }
        ],
        "photos": [
            {
                "id": 1,
                "store_id": 1,
                "path": "photos/Pink%20Cafe%20Tokyo_0.jpeg",
                "created_at": "2018-08-09 10:03:52",
                "updated_at": "2018-08-09 10:03:52"
            }
        ]
    }
    }

1 Ответ

0 голосов
/ 20 сентября 2018

Учитывая, что у вас есть struct, который отображается на объект хранилища с широтой и lng в качестве его атрибутов, как показано ниже

struct Store {
 // other attributes
  var lat: CLLocationDegrees
  var lng: CLLocationDegrees
}

А также, что у вас есть текущее местоположение, доступное в атрибуте с именем currentLocation.

Теперь в вашем массиве магазинов, чтобы отсортировать объекты по расстоянию от текущего местоположения, вы можете использовать код ниже

arrOfStores.sort { (obj1, obj2) -> Bool in
            let a = CLLocation(latitude: obj1.lat, longitude: obj1.lng)
            let b = CLLocation(latitude: obj2.lat, longitude: obj2.lng)
            return currentLocation.distance(from: a) < currentLocation.distance(from: b)

        }

Теперь ваш массив магазинов находится в порядке возрастания относительно расстояния оттекущее местоположение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...