《函数式swift》—swift为什么是用可选值?
Posted iOS开发知识整理
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《函数式swift》—swift为什么是用可选值?相关的知识,希望对你有一定的参考价值。
swift为什么是用可选值?
在Object-C中我们可以将nil作为一个参数传递给函数,但是这有个弊端,一个是空指针的访问,二是Object-C区分字典查询(键不存在于字典)和成功返回nil的字典查询(键存在于字典,但关联值是nil),只能使用NSNull来判断。
在Object-C中将消息发送给nil是安全的,但是使用他们往往并不安全。
这段oc的代码。rangeOfString: 将返回一个属性全为0的结构体,location将返回0,然后if内的代码被执行。这实际上是和我们期望的相违背的。
NSString * str = nil;
if([str rangeOfString:@"swift"].location != NSNotFound){
NSLog(@"some print");
}
但是如果这个例子在swift里面的话,就可以完全被避免,上面的代码会被编译器拒绝,类型系统也不会允许你在一个nil值上运行rangeOfString:。
var someString:NSString?
if let str = someString, str.range(of: "ddd").location != NSNotFound {
print("some thing")
}
//if 内代码并不会执行
类型系统将有助于你捕捉难以察觉的细微错误,其中一些错误很容易在开发过程中被发现,但是其余的可能会一直留在生产代码中去。坚持使用可选值能够从根本上杜绝这类错误。
以上是关于《函数式swift》—swift为什么是用可选值?的主要内容,如果未能解决你的问题,请参考以下文章
Swift Xcode 致命错误:在隐式展开可选值时意外发现 nil [重复]
在隐式展开可选值 AVAUDIO Player SWIFT 时意外发现 nil