2015-09-29 4 views
2

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

Следующее выдает ошибку, которая должна быть возвращена или разорвана, но в этом случае это невозможно.

var var1 = String?() 
guard let validVar = var1 else { 
    print("not nil") 
} 
+0

Мне не удалось найти способ сделать это, но вы можете использовать 'if let validVarTwo = var1 {validVar = validVarTwo}'. Это выглядит довольно уродливо, хотя – Jojodmo

+0

Если не внутри функции, то какой это контекст? Определение класса? Детская площадка? –

ответ

2

Нет, это невозможно. Чтобы инициализировать переменные знанием других переменных в классе, вы можете использовать ленивую инициализацию или getter.

var testString : String? 
lazy var testString2 : String = { 
    guard let t = self.testString else { return String()} 
     return t 
}() 

если IAM неправильно не стесняйтесь исправлять меня :)

охранник сделал для живучести функций я думаю, и будет делать перерыв в функции, если условия не правы. Поэтому, если вам действительно нужна эта переменная, она должна соответствовать условиям. Как и если пусть но более чистый :)

Из вашего примера: var testString = String?() Недействителен. Создание экземпляра строки никогда не будет нулевым, поэтому необязательный параметр не требуется.

Edit: Я написал пример в моей детской площадке.

import UIKit 

var var1 : String? 

var validVar : String = { 
    guard let validVar = var1 else { 
     print("not nil") 
     return "NIL" 
    } 
    return validVar 
}() 

print("\(validVar)") 
+0

Вы говорите, что код недействителен, но он определенно работает без ошибок. Итак, что недействительно? – 4thSpace

+0

ОК недействительно, что я ошибаюсь, но необязательный параметр не требуется, потому что его инициализация и не прерывается. –

Смежные вопросы