Как использовать тот же API в другом контроллере представления в swift?

#swift #api

#swift #API

Вопрос:

Я работаю над приложением для викторины, где в одном контроллере представления я показываю вопросы, и когда я нажимаю на любой из вопросов, он переходит к другому контроллеру представления и показывает вопрос с параметрами. Теперь я хочу использовать тот же API, который я использовал в первом контроллере представления, во втором контроллере представления. Как я могу это сделать?

В первом контроллере представления я использовал структуру, подобную этой:

 struct Questions {
    var id:String = ""
    var user_id:String = ""
    var questionset_id:String = ""
    var name:String = ""
    var type:String = ""
    var timetosolve:String = ""
}
  

Во втором контроллере представления я использовал ту же структуру в переменной, например:

 var data : [Questions] = []
  

Но проблема в том, что я не могу использовать переменные структуры во втором контроллере представления. Я пытался использовать переменную, например:

 questionLbl = data.name //here cannot find any variable named as 'name'
  

Здесь questionLbl — это метка, в которой я хочу использовать переменную.

Комментарии:

1. Вы должны установить текст метки с questionLbl.text = data[0].name

2. @Andre3000 Происходит сбой (индекс вне диапазона).

3. вам необходимо установить значение данных при представлении второго ViewController. secondVC.data = firstVC.question что-то вроде этого. Используете ли вы раскадровку?

4. @Andre3000 Я не хочу передавать данные здесь. Да, я использую storyboad.

Ответ №1:

Вам нужно переопределить func prepare(for segue: UIStoryboardSegue, sender: Any?) первый контроллер представления и передать переменную данных второму.

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "YourSequeIdentifier" {
        if let secondVC = segue.destination as? SecondVCClassName {
            secondVC.data = self.data
        }
    }
}
  

Поэтому вы можете получить доступ к своей data переменной из второго контроллера представления. Обратите внимание, что data переменная является массивом, и вы не можете получить к ней доступ таким data.name образом.

Комментарии:

1. По-прежнему не удается получить доступ к переменной.

2. @Simran Можете ли вы опубликовать, как вы пытаетесь получить доступ к переменной?

3. @Simran вы заменили «YourSequeIdentifier» своим фактическим идентификатором, установленным в interface builder? Вы выбрали segue.destination правильный контроллер представления?

4. Вопросlbl.text = data.name — (значение типа «[Вопросы]» не имеет члена «имя»)

5. Вы не можете получить доступ к массиву таким questionLbl.text = data.name образом. data это массив, поэтому вам нужно указать элемент, к которому вы пытаетесь получить доступ, например, data[0].name или data.first

Ответ №2:

Ваши вопросы о структуре должны быть объявлены в глобальной области, т.е. в новом файле «xyz.swift» или вне класса ViewController.

Я предполагаю, что вы сказали.

В первом контроллере представления я использовал структуру, подобную этой: