#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.
Я предполагаю, что вы сказали.
В первом контроллере представления я использовал структуру, подобную этой: