Как объявить модель, которая будет работать с вложенным объектом? - PullRequest
0 голосов
/ 29 октября 2018

Мне нужно создать объект, подобный этому

distances.append([
    "distanceInMiles":String(distanceInMiles),
    "distanceInMeters":String(distanceInMeters),
    "places": [
        {
            "name":nameI,
            "city":cityI,
            "lat":latitudeI,
            "lon":longitudeI,
            "coordinate":coordinateI
        }, {
            "name":nameJ,
            "city":cityJ,
            "lat":latitudeJ,
            "lon":longitudeJ,
            "coordinate":coordinateJ
        }
    ]
])

Каким должно быть объявление моей переменной?

Я пробовал

var distances = [ Dictionary<String,String>()]

Я получил

Метки аргументов '(_ :, _ :)' не соответствуют никаким доступным перегрузкам

Как можно отладить это дальше?

1 Ответ

0 голосов
/ 30 октября 2018

Просто напишите структуру / класс для такой сложной структуры:

struct Distance { // You might want to find a better name
    let distanceInMiles: Double
    let distanceInMeters: Double
    let places: [Place]
}

struct Place {
    let name: String
    let city: String
    let lat: Double
    let long: Double
    let coordinate: CLLocationCoordinate2D // You might want to make this a computed property instead
}

А затем вы можете создать массив Distance:

var distances = [Distance]()
distance.append(Distance(
    distanceInMiles: distanceInMiles,
    distanceInMeters: distanceInMeters,
    places: [
        Place(name: nameI, city: cityI, lat: latitudeI, long: longitudeI, coordinate: coordinateI),
        Place(name: nameJ, city: cityJ, lat: latitudeJ, long: longitudeJ, coordinate: coordinateJ),
    ]
))

Как видите, эстетика очень похожа на вашу JSON-подобную структуру.

Кстати, если вы планируете преобразовать эту структуру в JSON и отправить ее куда-нибудь, вы можете привести обе структуры в соответствие с Codable.

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