In swift you can unwrap optional values with a guard statement
guard let foo = foo else { return nil }
Is this statement making a copy of foo? In other words, could this statement be potentially expensive if foo is very large?
In swift you can unwrap optional values with a guard statement
guard let foo = foo else { return nil }
Is this statement making a copy of foo? In other words, could this statement be potentially expensive if foo is very large?
 
    
    Actually this depends on type of foo e.x class type won't create a copy unlike  struct type
guard isn't a magic keyword it simply if not presented in 1 word 
 
    
    guard let foo = foo else { return nil }Could this statement be potentially expensive if foo is very large?
Instead of asking yourself the question that way, ask it this way: what if you had said
if foo != nil {
    let foo = foo!
    // everything else here
}
Was saying foo! to unwrap the Optional "expensive"? Whatever your answer is, it must be exactly the same for guard let foo = foo, because they both do exactly the same thing: they test for nil and, if safe, they unwrap the Optional. And that is all they both do. The one is merely syntactic sugar for the other.
You have two ways:
1- To only check if this foo does not equal nil
   In this case you can check if foo is nil or not  
if foo != nil {
    // do you work here
}
2- To get information from foo
    In this case, you have to unwrap this optional (with guard-let or if-let statements) and here we have two cases:
    - if foo is a class, then it’s a reference type. so there will be no copy and a reference to this instance is created
    - if foo is a struct, then it’s a value type. so an entirely new instance is created (copied from the original)
    Also you can read this answer to see should you choose struct or class in swift
 
    
    If the property you're unwrapping is a reference type (e.g. a class) then no it will not make a copy, it will just create a new property with a reference to the original instance.
If the property you're unwrapping is a value type (e.g. struct) then it will make a copy.
