swift 进阶笔记 (一) —— 可选型

swift定义可选型的时候,要用“?”,但是在swift的标准库中,可选型的定义是Optional,”?”只是个简写形式。var myNum: Int?var myNum: Optional两句等价可以看出可选型是个泛型,而Optional又是个枚举,Optional可以是 None,也可以是Some(T):protocol Reflectable {
摘要由CSDN通过智能技术生成
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> :  LogicValue Reflectable  {
    
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> 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值