Подтвердить что ты не робот

Инициализация массива struct в Swift

Продолжая играть в Swift и пытаться преобразовать что-то из мира C и застрять, пробовав различный синтаксис. У меня есть фиксированные данные, которые я хочу инициализировать в массив структуры. Здесь, как я это делаю, делаю это на C, но я не могу понять это в Swift, чтобы вместо того, чтобы угадывать, я попрошу тех, кто знает больше. Вот мой код C.

#include <stdio.h>

typedef struct my_data {
  const char *company;
  const char *city;
  const char *state;
  float latitude;
  float longitude;  
} my_data;

int main() {

    my_data data[2]={
        { "Joes Crab Shack", "Miami", "FL", 30.316599, -119.050254},
        { "Jims Crab Shack", "Los Angeles", "CA", 35.316599, -112.050254}
    };
}

В Swift я могу создать подобную структуру...

struct my_data {
    var company = String();
    var city = String();
    var state = String();
    var latitude:Float;
    var longitude:Float;
}

Теперь я застрял в том, как объявлять и инициализировать фиксированные данные, как я делаю в C. Угадав, что это что-то простое, и правильность синтаксиса меня озадачила. Я хотел бы сохранить стиль инициализации в схожих форматах с C, так как я могу легко извлечь и отформатировать эти данные из файла.

4b9b3361

Ответ 1

Один вариант может быть для вас использовать массив массивов:

var data = Array<(company: String, city: String, state: String, latitude: Float, longitude: Float)>()

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

var datumOne = ("MyCompany", "MyCity", "MyState", 40.2, 139.45)
data += datumOne
println(data[0].state)      // MyState

data = [
    ( "Joes Crab Shack", "Miami", "FL", 30.316599, -119.050254),
    ( "Jims Crab Shack", "Los Angeles", "CA", 35.316599, -112.050254)
]
println(data[1].company)    // Jims Crab Shack

Однако выполнение этого не дает вам доброты типа, которые вы получаете из структуры... в Swift все структуры автоматически получают то, что называется "инициатором элемента", что требует, чтобы вы их инициализировали так, используя имена членов в качестве ярлыков аргументов (и в том порядке, в котором они объявлены в структуре):

var myDatum = MyData(company: "The Company", city: "The City", state: "The State", latitude: 90.2, longitude: 140.44)

Вы можете определить свой собственный метод init() для своей Структуры, однако, если вы хотите использовать инициализатор, который лучше подходит для вашей цели.

Итак, чтобы дать себе массив структур, используя начальный инициализатор по умолчанию, который вы просто выполните:

let allMyData = [
    MyData(company: "Jims Crab Shack", city: "Los Angeles", state: "CA", latitude: 35.316599, longitude: -112.050254),
    MyData(company: "Joes Crab Shack", city: "Miami", state: "FL", latitude: 30.316599, longitude: -119.050254)
]

Ответ 2

Подобно этому (примечание, я изменил имя вашей структуры, чтобы соответствовать стилям стиля Swift):

struct MyData {

  var company = String()
  var city    = String()
  var state   = String()

  var latitude:  Float
  var longitude: Float
}

let data = [
  MyData(company: "Joes Crab Shack", city: "Miami", state: "FL", latitude: 30.316599, longitude: -119.050254),
  MyData(company: "Jims Crab Shack", city: "Los Angeles", state: "CA", latitude: 35.316599, longitude: -112.050254)
]

Ответ 3

j.s.com Вы писали:

var myStruct: TheStruct = TheStruct

но я пробовал и не работает. Для меня это прекрасно работает:

var myStruct: [TheStruct] = []

Ответ 4

struct MyData {

    var company = String()
    var city = String()
    var state = String()
    var latitude:Float
    var longitude:Float

}

var dataArray = [MyData]()

var data = MyData(company: "Joes Crab Shack", city: "Miami", state: "FL", latitude: 30.316599, longitude: -119.050254)

//может добавить структуру, подобную этой

dataArray.append(data)

//или как этот

dataArray.append(MyData(company: "Jims Crab Shack", city: "Los Angeles", state: "CA", latitude: 35.316599, longitude: -112.050254))

//для получения элемента

var thisCompany = dataArray[0].company // Joes Crab Shack

//изменить элемент

dataArray[0].city = "New York"

var thisCity = dataArray[0].city // New York

Ответ 5

Здесь вы получите небольшой пример того, как обрабатывать массивы структуры в Swift:

Сначала определение структуры:

struct TheStruct
{
    var Index: Int = 0
    var Name: String = ""
    var Sample: [String] = [String]()
}
var myStruct: TheStruct = [TheStruct]()

Затем добавление элемента в структуру

func Append1Element()
{
    myStruct.append(TheStruct(Index: 0, Name: "", Sample: []))
}

И изменение существующего элемента:

func ChangeName(theName: String)
{
    myStruct[0].Name: theName
}

Ответ 6

struct _data {

    var company = String();
    var city = String();
    var state = String();
    var latitude:Float;
    var longitude:Float;

}

//To initialize
var MyData = [_data()];
//To access
MyData[index].company or .city etc..
//To Add new element
MyData.append(_data(company: theCompany, city: theCity, state: theState, latitude: theLatitude, longitude: theLongitude));
//To count
MyData.count

Приветствия