博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift 进阶笔记 (一) —— 可选型
阅读量:6040 次
发布时间:2019-06-20

本文共 1246 字,大约阅读时间需要 4 分钟。

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> 

转载地址:http://ysrhx.baihongyu.com/

你可能感兴趣的文章
SpringMVC完成文件上传的基本步骤
查看>>
实例168 使用指针输出数组元素
查看>>
bind 与unbind
查看>>
CSS: Flexbox
查看>>
Python学习
查看>>
Java并发_volatile实现可见性但不保证原子性
查看>>
百度地图添加带数字标注
查看>>
【luogu 1908】逆序对
查看>>
pthread_create线程创建的过程剖析(转)
查看>>
android存储访问框架Storage Access Framework
查看>>
周总结
查看>>
Spring Boot 要点--启动类和热部署
查看>>
Maven配置及本地仓库设置
查看>>
PAT L2-001 紧急救援 —— (多参数最短路)
查看>>
JDK(java se development kit)的构成
查看>>
数据库的备份与恢复
查看>>
Android示例程序剖析之记事本(一)
查看>>
为什么英雄难过美人关?
查看>>
poj 3009 Curling 2.0
查看>>
Tomcat7安装配置 for Ubuntu
查看>>