Как использовать охрану вне функции?

Можно ли использовать 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)")
Другие вопросы по тегам