首页 Swift可选类型Optional的用法
文章
取消

Swift可选类型Optional的用法

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.")
}
本文由作者按照 CC BY 4.0 进行授权

组件化开发之开发小组件

两个数之和