Думаю, я проследил проблему ошибки Член экземпляра 'txtProblem' не может использоваться с типом 'TextProblemViewController' , однако мне интересно, как лучше всего справляться с базовым проблема.
У меня есть глобальная структура данных TextProblems , которую я использую для получения данных JSON. Эти данные используются несколькими контроллерами представления. Вот почему я объявил его как глобальную переменную
var problems:TextProblems!
class TextProblemViewController: UIViewController {
Теперь я хотел разбить свой viewDidLoad () на части и переместить код в отдельную функцию, таким образом,
override func viewDidLoad() {
super.viewDidLoad()
do {
problems = try readJsonProblem()
} catch {
print(error.localizedDescription)
}
txtProblem.text = fillParamters(textRaw: problems.textProblem[i].problemStmnt.problemText, parameters: problems.textProblem[i].problemStmnt.problemPrmtr.map {$0.param})
стало
let ProblemStmntView: UIView = {
let view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
view.backgroundColor = UIColor.white
txtProblem.text = fillParamters(textRaw: problems.textProblem[i].problemStmnt.problemText, parameters: problems.textProblem[i].problemStmnt.problemPrmtr.map {$0.param})
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
do {
problems = try readJsonProblem()
} catch {
print(error.localizedDescription)
}
view.addSubview(ProblemStmntView)
Это приводит к приведенному выше сообщению об ошибке в строке txtProblem.text = fillParameters , где txtProblem нас IBOutlet метки Я видел 3 разрешения и представляю себе 3-е - и Думаю, их больше:
объявить переменную как stati c (но это не работает вне класса при объявлении глобальной переменной
сделать переменную ленивой, однако, я думаю, я не могу объявить IBOutlet как ленивый
передать данные из viewDidLoad в мое закрытие (пример показал передачу его функции в качестве решения ), однако не уверен, как передать данные в закрытие инициализации
объявить глобальную переменную как stati c в структуре
Итак, мой вопрос: что? • Считаете ли вы, что это лучшая практика при совместном использовании данных, не инициализированных до времени выполнения, между контроллерами представления и функциями классов? Вы бы объявили глобальную переменную или каким-то образом передавали данные между контроллерами представления, функциями (и закрытием инициализации ???)?