Правда, этот случай немного искажен, но все же мне любопытно узнать, является ли это потенциальной ошибкой в компиляторе Swift2.0. Попробуйте это в Xcode7 playground-Странный случай, когда Swift2.0 позволяет использовать неинициализированный глобальный внутри замыкания
var global : Int
var factorial : (Int->Int)!
factorial = { x in
global = global + 1
print(global)
return x == 0 ? 1 : x * factorial(x - 1)
}
factorial(5)
Компилятор счастливо компилирует и даже вычисляет факториал и увеличивает глобальный тоже и даже отображает значение глобальной внутри закрытия при вызове. Теперь попробуйте распечатать глобальную информацию после вызова факториала (5), и теперь компилятор вдруг начинает жаловаться, что вы пытаетесь использовать «глобальный» перед инициализацией !.
Я думаю, что это ошибка в компиляторе где-то и поведение должно было быть последовательным. Но сначала подумал о консультациях с экспертами! Есть предположения?
Спасибо. Да, напишу. – Shripada