Swift 2.0元组,许多作业

时间:2016-01-27 23:48:01

标签: swift2 tuples dropbox-api

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)是元组,则为变量赋值。

我得不到:有三个等号和多个逗号,哪些值被分配到哪里?

2 个答案:

答案 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...
}