Я понимаю использование необязательных параметров достаточно, чтобы знать, когда необходимо развернуть необязательный элемент с помощью восклицательного знака. Почему восклицательный знак не нужен в операторе защиты?
Этот код работает и компилируется, но не использует восклицательные знаки:
struct Blog{
var author:String?
var name: String?
}
func blogInfo2(blog:Blog?){
guard let blog = blog else {
print("Blog is nil")
return
}
guard let author = blog.author, name = blog.name else {
print("Author or name is nil")
return
}
print("BLOG:")
print(" Author: \(author)")
print(" name: \(name)")
}
Этот код также работает, если вы ставите восклицательные знаки:
struct Blog{
var author:String?
var name: String?
}
func blogInfo2(blog:Blog?){
guard let blog = blog! else {
print("Blog is nil")
return
}
guard let author = blog.author!, name = blog.name! else {
print("Author or name is nil")
return
}
print("BLOG:")
print(" Author: \(author)")
print(" name: \(name)")
}
Разве это не немного противоречиво или кто-то может четко объяснить, почему восклицательный знак не нужен?
guard let blog = blog!
. Какую версию Swift вы используете? - person Phillip Mills   schedule 15.07.2016