Optional represents either wrapped value or nil.
Optionals are generic enum type that works as wrapper.
Basically wrapper allow variable have 2 states:
Optional can be created by appending either "?" or "!".
example :
Optionals are generic enum type that works as wrapper.
Basically wrapper allow variable have 2 states:
- User define type
- nil (that represent no value)
Optional can be created by appending either "?" or "!".
example :
var name : String? = nil
var lname : String! = nil
"?" must be explicitly unwrapped where as "!" automatically unwrapped.
Conditionally unwrapped use "?" optional binding where as force unwrapped use "!" operator. If you force unwrapped variable and value is nil then program will throw exception and crash so be careful.
example :
var lname : String! = nil
print(lname!)
Output :
fatal error: unexpectedly found nil while unwrapping an Optional value
Safe unwrapping :
Using if-let statement safe unwrap
example :
func safeUnwrap(withName name : String?){
if let userName = name{
print(userName)
}else{
print("name value is nil")
}
}
safeUnwrap(withName: "Pratik")
Output :
Pratik
safeUnwrap(withName: nil)
Output :
name value is nil
Using guard-let statement safe unwrap
example :
func safeUnwrap(withName name : String?){
guard let userName = name else{
print("user name not found")
return
}
print(userName)
}
safeUnwrap(withName: "Pratik")
Output :
Pratik
safeUnwrap(withName: nil)
Output :
user name not found
Using Coalescing operator safe unwrap
example :
var name : String? = nil
print(name ?? "name value is nil")
Output :
name value is nil
var name : String? = nil
name = "Pratik"
print(name ?? "name value is nil")
Output :
Pratik
You can also use Optional chaining in order to call method,property or subscript.
example :
struct Family{
func printName() {
print("Hello friends")
}
}
var objFamily : Family?
objFamily?.printName()
Output :
no print
var objFamily : Family? = Family()
objFamily?.printName()
Output :
No comments:
Post a Comment