zoukankan      html  css  js  c++  java
  • Swift新手教程12-可选链

    可选链

    原创Blog,转载请注明出处
    我的博客地址

    http://blog.csdn.net/hello_hwc
    可选链提供一个一种可选的方式訪问对象的属性、方法、下标脚本,可选链的返回值一定是可选类型。
    长处:替代强制解析(符号!,比如instance.location!.y),由于强制解析nil的值会导致执行期错误
    我的心得:对一个链式调用,比方instance.Frame.Origin.x等非常长的调用,对可能是nil的部分加上?

    比如,frame和Origin可能为nil。则这么使用instance.Frame?.origin?.x

    可选链的特点:中间有一次可选的值为nil,那么整个可选链失效。返回nil

    举个简单的样例就明确了

    class A{
    	var varA:B?

    } class B{ var varB:C?

    var varBArray = [D]() subscript(index:Int)->D?{ if(index < varBArray.count){ return varBArray[index] } else{ return nil } } } class C{ var varC:String = "from C" func printC(){ println(varC) } } class D{ var varD1:Int = 10 var varD2:E = E() } class E{ func printE(){ println("from E") } } var instance = A()


    一、通过可选链调用属性
    备注:因为返回可选类型,要用if let这种句式隐式解析
    if let temp = instance.varA?.varB?.varC{
    	println(temp)
    }
    

    二、通过可选链调用方法
    instance.varA?.varB?.printC()
    


    三、通过可选链调用下标脚本
    if let temp = instance.varA?

    [5]?.varD1{ println(temp) }


    这里解释下为什么这么用

    instance.varA?[5]是用可选链訪问下标脚本。返回D?,然后对返回的D?再通过可选链訪问,搜易訪问的时候是 instance.varA?[5]?.varD1

    四、长的可选链调用

    instance.varA?[5]?.varD2.printE()

  • 相关阅读:
    zend server 配置问题 ZendEnablerConf.xml
    ZendStudio 正式版注册破解
    eq几种样式
    js 简单语法 集合
    div上加连接》实用笔记
    VC解析XML使用CMarkup类解析XML
    用PNG透明图片和GDI+做不规则透明窗体"异形窗口"
    程序调试手记—解决Stack Overflow问题
    堆和栈的区别
    CString转换为char *
  • 原文地址:https://www.cnblogs.com/llguanli/p/6780971.html
Copyright © 2011-2022 走看看