Swift可选型(optional)各种用法示例

Swift可选型(optional)各种用法示例
原文:optionals

the optionals

let optional: String? = "unicorn"
var optional2: Int?
let optionals: [String?] = ["unicorn", nil, "dragon"]
var optionals2: [Int]?

if let

if let value = optional {

multiple variables

if let value = optional, let value2 = optional2 {

boolean clause

if let value = optional, value.hasSuffix("saurus") {

guard

guard let value = optional else { 
  return
}

while let

while let value = optional {

nil coalescing

let value = optional ?? "nil"

force unwrapping

let value = optional!

switch block

switch optional {
case .some(let value):
  print(value)
case .none:
  print("nil")
}

map()

let value = optional.map(String.init(describing:))

flatMap()

let value = optional.flatMap(URL.init(string:))

compactMap()

let values = optionals.compactMap { $0 }

type casting

let value = optional as! String

optional chaining

let value = optional?.uppercased()

for loop

for element in optionals {
  if let value = element {

for case let

for case let optional? in optionals {

for case .some

for case .some(let value) in optionals {

forEach

optionals2?.forEach { value in

assignment

assigns if the optional has a value
optional2? = 2014

pattern matching

switch optional {
case "unicorn"?:
  print("Unicorn!")
default:
  print("Not Unicorn")
}

enums

enum Animal {
  case pet(type: String?)
}

switching with associated optionals

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

let enumValue2: Animal? = nil
switch enumValue2 {
case .pet?:
  print("Pets")
default:
  print("No pets.")
}

参考

Apple Developer Documentation: Optional
The Complete Guide to Optionals in Swift
Swift optionals explained simply
Extending optionals in Swift

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 生娃前,你可文艺,可小资,可以拉起行李箱随时来场说走就走的旅行。甚至不明白,怎么那么多人总是迈不开步子去过自己想要...
    Abby大陶子阅读 354评论 1 1
  • 这是MrKevin 365天写作计划中第8天的写作内容。 大年初一,最重要的事情是拜年,顺便发红包。由于今年举家都...
    MrKevin阅读 199评论 0 0
  • compile'liji.library.dev:citypickerview:0.7.0' private vo...
    卓而不群_0137阅读 346评论 0 0
  • 今天还是像往常一样,早早起来给大宝做好饭,叫他起床,起来洗漱完后开始吃饭,可是马上快到点了老二还没有醒,怎么办啊...
    两个千金阅读 115评论 0 0