2015-09-18 37 views
1

我一直在尝试修复自swift 2.0更新以来的所有代码。我有这似乎是现在的方式的元组工作的一个问题:Swift 2.0元组模式元素标签必须是'_'

public func generate() -> AnyGenerator <(String, JSON)> { 
    switch self.type { 
    case .Array: 
     let array_ = object as! [AnyObject] 
     var generate_ = array_.generate() 
     var index_: Int = 0 
     return anyGenerator{ 
      if let element_: AnyObject = generate_.next() { 
       return ("\(index_++)", JSON(element_)) 
      } else { 
       return nil 
      } 
     } 
    case .Dictionary: 
     let dictionary_ = object as! [String : AnyObject] 
     var generate_ = dictionary_.generate() 
     return anyGenerator{ 
      if let (key_: String, value_: AnyObject) = generate_.next() { 
       return (key_, JSON(value_)) 
      } else { 
       return nil 
      } 
     } 
    default: 
     return anyGenerator{ 
      return nil 
     } 
    } 
} 

具体线路:

if let (key_: String, value_: AnyObject) = generate_.next() 

抛出错误:元组模式元素标签“键”必须“_”

我试图让这个变化已经,但我没有工作...

任何想法?

回答

5

问题是:我们不能使用类型注释里面的元组模式

release notes

Type annotations are no longer allowed in patterns and are considered part of the outlying declaration. This means that code previously written as:

var (a : Int, b : Float) = foo() 

needs to be written as:

var (a,b) : (Int, Float) = foo() 

if an explicit type annotation is needed. The former syntax was ambiguous with tuple element labels. (20167393)

所以,你可以:

if let (key_, value_): (String, AnyObject) = generate_.next() { 

但在这种情况下,你可以省略: (String, AnyObject)

if let (key_, value_) = generate_.next() { 
+1

是的,这抓住了我也和我问了苹果。改变是故意的。我喜欢另一种符号,但这种变化真的没有什么大不了的...... – matt

+0

这是一种什么样的魔法,它起作用了!谢谢 – aldominium

相关问题