zoukankan      html  css  js  c++  java
  • swift 进阶笔记 (一) —— 可选型

    swift定义可选型的时候,要用“?”,可是在swift的标准库中,可选型的定义是Optional<T>,”?

    ”仅仅是个简写形式。


    var myNum: Int?
    var myNum: Optional<Int>
    两句等价

    能够看出可选型是个泛型,而Optional又是个枚举。Optional能够是 None,也能够是Some(T):

    protocol Reflectable {
        
    /// Get the mirror that reflects this object.
        func getMirror() -> Mirror
    }


    protocol LogicValue {
        
    func getLogicValue() -> Bool
    }


    enum Optional<T> : LogicValueReflectable {
        
    case None
        
    case Some(T)
        
    init()
        
    init(_ some: T)

        
    /// Allow use in a Boolean context.
        func getLogicValue() -> Bool

        
    /// Haskell's fmap, which was mis-named
        func map<U>(f: (T) -> U) -> U?
        
    func getMirror() -> Mirror
    }


    从定义中能够看出,可选型是符合LogicValue协议的,所以。能够被用在if推断中。那么这里就有一个非常好玩的事情了:在swift中。Int并不能够写在 if中。比方:
    var a:Int = 3
    if a {          //这里会报错
         println(“hehe")
    }

    可是我们学过扩展,我们能够自行让Int写在if中:
    extension Int:LogicValue {          //我让Int遵循了LogicValue协议
        
    func getLogicValue() -> Bool {     //实现LogicValue协议的要求
            
    if self != 0 {               //非0的话,返回true,否则返回false
                
    return true
            } 
    else {
                
    return false
            }
        }
    }

    var a:Int = 3

    if a {     //这里不会报错了!


        println("hehe")
    }

    是不是忽然认为非常灵活,非常好玩。

    。。

    仅仅要附合语言解析的逻辑,就能够创造出非常多玩法。

    。。

    可是。。。这不过玩玩,千万别用在项目里,假设真要用。这也不过语法糖。

    。。 



    隐式解析可选型
    之前提到可选型 “?

    ”是Optional<T>的简写形式。

    ”!”则是ImplicitylyUnwrappedOptional<T>的简写形式。这叫做隐式解析可选型

    如同可选型一样,隐式解析可选型也能够写成两种形式:

    var num:Int!
    var num:ImplicitlyUnwrappedOptional<Int> 

  • 相关阅读:
    正则表达式练习,持续更新中
    Jquery使用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
    SQL查找 删除重复数据只保留一条
    TreeView(C#)无限目录树代码片段
    ora-01440:要减小精度或标度,则要修改的列必须为空
    SQL查询和删除重复字段的内容
    CodeSmith(C#)简单示例及相关小知识
    MSSQL 自定义函数详解
    一些精妙的sql语句收集
    134.Gas Station
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5061611.html
Copyright © 2011-2022 走看看