Swift实用小册15:OptionalChaining可选链的使用
        【摘要】 在本章中,你将学会OptionalChaining可选链的使用方法。前言和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。这同时也是对自己学习Swift语言过程的知识整理。如有错误,以你为准。可选链的定义可选链,是一种以安全的方式访问类的对象属性的方法。可选链的作用,其实是为了在我们访问某个对象属性时,...
    
    
    
    
 在本章中,你将学会OptionalChaining可选链的使用方法。
前言
 和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。
 这同时也是对自己学习Swift语言过程的知识整理。
 如有错误,以你为准。
可选链的定义
 可选链,是一种以安全的方式访问类的对象属性的方法。
 可选链的作用,其实是为了在我们访问某个对象属性时,防止由于返回结果为nil,即属性不存在而引发的系统报错或者闪退,因为Swift不能空调用。
可选链的使用
 我们新建一个PlayGround项目,命名为SwiftOptionalChaining。
 
 可选链的使用方式是在属性、方法、或下标的可选值后面放一个问号“?”,可选链可以将返回的结果包装成可选项,如果可选项有值,那么调用就会成功,输出的结果就会被包装成可选项。但如果可选值是 nil,那么调用就会失败并返回 nil。示例:
   import UIKit
  
 
  
   class Person {
  
 
  
       var name: String = "文如秋雨"
  
 
  
       var age: Int = 26
  
 
  
   }
  
 
  
   var person: Person? = Person()
  
 
  
   if ((person?.name) != nil)&&(person?.age) != nil {
  
 
  
       print("name和age的值不为空")
  
 
  
   } else {
  
 
  
       print("name和age的值为空")
  
 
  
   }
  
 
 
 上述代码中,我们定义了一个Person类,在Person类中我们声明了两个变量:name、age,确定好类型并赋予了参数值。
 如果我们需要访问Person类的对象时,我们声明一个类型的Person可选项的person变量访问Person类。
 我们这里加一层判断,如果name、age的可选项返回值不为空,我们打印输出下内容,如果为空,我们也打印输出下内容。
 这种方式能让我们快速定位到问题点,特别是当我们是通过网络请求或者接口接收json格式的数据时,我们就需要通过可选链式调用访问对应的属性。示例:
  let json = """
 
 
 
  {
 
 
 
  "name": "Ricardo",
 
 
 
  "country": "China",
 
 
 
  "city": "Guangzhou"
 
 
 
  }
 
 
 
  """
 
 

 上述代码是我们最简单接收到的json格式数据,它有三个属性:name、country、city,如果在我们系统里需要使用到4个参数name、age、country、city,如果接收到的json里根本我们需要的属性age,那么用可选链的方式,我们就可以马上知道,而不至于系统报错。
可选链的其他使用
 如果对象是是数组或者字典类型,我们还可以使用可选链的下标方式调用或者修改数组或者字典的值。
   class Model {
  
 
  
       var sampleModels = ["前端", "后端", "安卓", "iOS"]
  
 
  
   }
  
 
  
   var model: Model? = Model()
  
 
  
   let category = model?.sampleModels[0]
  
 
  
   print("\(String(describing: category))")
  
 
 
 上述代码中,我们定义了一个Model类,声明了一个变量数组,并赋予了一些值。
 同样,我们声明一个可选项model,数据来源于Model类。然后声明了一个category常量使用可选链下标的方式获得sampleModels数组第一个值,我们打印输出看下效果。
 
本章代码
  // SwiftOptionalChaining
 
 
 
  import Foundation
 
 
 
  import UIKit
 
 
 
  class Person {
 
 
 
      var name: String = "文如秋雨"
 
 
 
      var age: Int = 26
 
 
 
  }
 
 
 
  var person: Person? = Person()
 
 
 
  if ((person?.name) != nil) && (person?.age) != nil {
 
 
 
      print("name和age的值不为空")
 
 
 
  } else {
 
 
 
      print("name和age的值为空")
 
 
 
  }
 
 
 
  let json = """
 
 
 
  {
 
 
 
  "name": "Ricardo",
 
 
 
  "country": "China",
 
 
 
  "city": "Guangzhou"
 
 
 
  }
 
 
 
  “""
 
 
 
  class Model {
 
 
 
      var sampleModels = ["前端", "后端", "安卓", "iOS"]
 
 
 
  }
 
 
 
  var model: Model? = Model()
 
 
 
  let category = model?.sampleModels[0]
 
 
 
  print("\(String(describing: category))")
 
 
 以上就是本章的全部内容。
 快来动手试试吧!
 如果本专栏对你有帮助,不妨点赞、评论、关注~
        
            【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
                cloudbbs@huaweicloud.com
                
            
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)