Проблема не в том, где объект WeatherManager
объявлен и создан. Проблема в том, что эта строка:
weatherManager.delegate = self
является командой (технически оператор ), а не объявлением. (Строка над ним является объявлением, которое также устанавливает значение по умолчанию свойства weatherManager
). Это довольно универсальное правило в большинстве языков семейства C ++ / Java - см. Короткий пример C ++ ниже. Команда (оператор) должна находиться внутри какого-либо метода (или функции в не OOP программировании), а не на верхнем уровне файла или класса. В Swift такие действия, как установка делегата объекта, обычно go в контроллере представления viewDidLoad
.
int x = 0; // legal: declaring a global variable
x = x + 42; // NOT legal: this is a statement, not a declaraiton
int main()
{
x = x + 42; // legal: now we're inside a function
return 0;
}