if let (metadata, url) = response, data = NSData(contentsOfURL: url), image = UIImage(data: data) {
来源:https://github.com/dropbox/PhotoWatch/blob/master/PhotoWatch/PhotoViewController.swift
我对这种语法感到有点困惑,并且想知道是否有人可以帮我搞定。
我得到了什么:我理解if let
如果值存在且(metadata, url)
是元组,则为变量赋值。
我得不到:有三个等号和多个逗号,哪些值被分配到哪里?
答案 0 :(得分:1)
这部分只是大型多重赋值(3个变量):
(metadata, url) = response, data = NSData(contentsOfURL: url), image = UIImage(data: data)
(metadata,url)获得“响应”,数据“NSData(contentsOfURL:url)”和图像“UIImage(数据:数据)”
这很方便,因为可以在声明/赋值后立即使用变量。
“if”子句正在寻找整个作业,就好像它是一个单一作业。
答案 1 :(得分:1)
您的if let
代码段说明了可怕的,无法读取的代码格式。一个正确的格式是:
if let (metadata, url) = response,
data = NSData(contentsOfURL: url),
image = UIImage(data: data) {
// Use the four bound variables
}
else {
// One or more of the four are nil
}
if let
句法形式将执行'结果'如果所有绑定变量都不是nil
;否则'替代'被执行。
if let
,
语法是更新的Swift语法。过去,一次只能进行一次任务。人们编写了这样的代码:
if let (metadata, url) = response {
if let data = NSData(contentsOfURL: url) {
if let image = UIImage(data: data) {
// Use the four bound variables
}
// lots of `else` clauses; a big mess...
}