Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 什么';if-let语句的意义是什么?_Swift - Fatal编程技术网

Swift 什么';if-let语句的意义是什么?

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在大多数基础教程中都很重要,比如它很有用,那么我真

我读过关于可选绑定的Swift文档,但就我的知识(和/或智力)水平而言,这是无法理解的

这两者之间的区别是什么:

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")
}