Как использовать охрану вне функции?
Можно ли использовать guard
вне функции?
Следующее выдает ошибку, что необходимо использовать return или break, но в этом случае это невозможно.
var var1 = String?()
guard let validVar = var1 else {
print("not nil")
}
1 ответ
Нет, это невозможно. Чтобы создать переменные со знанием других переменных в классе, вы можете использовать ленивую инициализацию или метод получения.
var testString : String?
lazy var testString2 : String = {
guard let t = self.testString else { return String()}
return t
}()
если я ошибаюсь, не стесняйтесь поправлять меня:)
Я думаю, что защита предназначена для надежности функций, и она нарушит функцию, если условия будут неправильными. Так что если вам действительно нужна эта переменная, она должна соответствовать условиям. Как будто пусть, но более чистый:)
Из вашего примера: var testString = String?() Недействителен. Создание строки никогда не будет равно нулю, поэтому необязательный параметр не требуется.
Изменить: я написал пример на моей площадке.
import UIKit
var var1 : String?
var validVar : String = {
guard let validVar = var1 else {
print("not nil")
return "NIL"
}
return validVar
}()
print("\(validVar)")