Optional
1
2
3
4
let optional: String? = "unicorn"
var optional2: Int?
let optionals: [String?] = ["unicorn", nil, "dragon"]
var optionals2: [Int]?
if let
1
2
3
4
let optional: String? = "unicorn"
if let value = optional {
print(value)
}
multiple variables
1
2
3
4
5
6
let optional: String? = "unicorn"
var optional2: Int?
if let value = optional, let value2 = optional2 {
print(value)
print(value2)
}
boolean clause
1
2
3
4
let optional: String? = "unicorn"
if let value = optional, value.hasSuffix("corn") {
print(value) // hasSuffix后缀结束
}
guard
1
2
3
4
5
let optional: String? = "unicorn"
guard let value = optional else {
return
}
print(value)
while let
1
2
3
4
let optional: String? = "unicorn"
while let value = optional {
print(value)
}
nil coalescing
1
2
3
let optional: String? = "unicorn"
let value = optional ?? "nil"
print(value)
force unwrapping
1
2
3
let optional: String? = "unicorn"
let value = optional!
print(value)
switch block
1
2
3
4
5
6
7
let optional: String? = "unicorn"
switch optional {
case .some(let value):
print(value)
case .none:
print("nil")
}
map()
1
let value = optional.map(String.init(describing:))
flatMap()
1
let value = optional.flatMap(URL.init(string:))
compactMap()
1
let values = optionals.compactMap{ $0 }
type casting
1
let value = optional as! String
optional chaining
1
let value = optional?.uppercased()
for loop
1
2
3
for element in optionals {
if let value = element {}
}
for case let
1
for case let optional? in optionals {}
for case .some
1
for case .some(let value) in optionals {}
forEach
1
2
optionals2?.forEach{ value in
}
assignment
assigns if the optional has a value
1
optional2? = 2014
pattern matching
1
2
3
4
5
6
switch optional {
case "unicorn"?:
print("Unicorn!")
default:
print("Not Unicorn")
}
enums
1
2
3
enum Animal {
case pet(type: String?)
}
switching with associated optionals
1
2
3
4
5
6
7
let enumValue = Animal.pet(type: optional)
switch enumValue {
case .pet(.some(let value)):
print("I am a \(value).")
case .pet(.none):
print("I am unknown.")
}
switching on optional enums
1
2
3
4
5
6
7
let enumValue2: Animal? = nil
switch enumValue2 {
case .pet?:
print("Pets")
default:
print("No pets.")
}