Swift 什么';if-let语句的意义是什么?
我读过关于可选绑定的Swift文档,但就我的知识(和/或智力)水平而言,这是无法理解的 这两者之间的区别是什么:Swift 什么';if-let语句的意义是什么?,swift,Swift,我读过关于可选绑定的Swift文档,但就我的知识(和/或智力)水平而言,这是无法理解的 这两者之间的区别是什么: var number:Int? = 1 if let num = number { print("number is \(number!)" } else { print("it must be nil") } 及 据我所知,这些作品都是一样的,至少对我来说,第二部更具可读性。我通常不会关心这样的事情,但是如果let在大多数基础教程中都很重要,比如它很有用,那么我真
var number:Int? = 1
if let num = number {
print("number is \(number!)"
} else {
print("it must be nil")
}
及
据我所知,这些作品都是一样的,至少对我来说,第二部更具可读性。我通常不会关心这样的事情,但是如果let在大多数基础教程中都很重要,比如它很有用,那么我真的很想知道为什么。应该是这样的
print("number is \(num)"
那么它做什么呢?它在一行中对非光学常数进行零检查和赋值假设有两个可选值a和B 经典语法
if a != nil {
if a?.b != nil {
here access a.b.blah
}
}
新语法
if let blah=a?.b?.blah {
use blah ...
}
它更短、更可读、更灵活答案是避免在其中一个子句中强制展开。
事实上,您总是在子句后面看到一条语句是没有帮助的,但是假设您在变量与nil不同的范围内有更多的语句,想象一下记住!每次都需要参考未包装的值。
使用
if-let
可能是编译器在正常检查nil后再进行简单的变量赋值时对其进行翻译。使用if-let
语句时,您还可以在if let
语句的范围内,将可选值number
展开为非可选值Int
var number: Int? = 1
if let number = number {
// number is an Int
print("number is \(number!)")
} else {
// number is an Int?
print("it must be nil")
}
我知道它是做什么的,但是为什么我需要一个非可选的常数呢?也许你不想写这个数字!可能在1000个位置,但是else块中的第一行可以是
var n=number代码>。那不是一回事吗?我不想吹毛求疵,但恐怕我遗漏了什么/误解了什么。是的,但这会降低代码的可读性。-所以它是“语法糖”,我的问题是,它对我来说不那么可读。我已经浪费了一个小时试图理解这一点,所以我想这只是那些对我来说没有意义的事情之一。啊,我的知识缺乏。这对我来说不是很容易理解,但我想我会根据经验来理解的。起初对我来说也很奇怪(来自java),但后来我意识到。。。耶!!!不再检查空值不是直接的答案,但是
var number: Int? = 1
if let number = number {
// number is an Int
print("number is \(number!)")
} else {
// number is an Int?
print("it must be nil")
}