自从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
}
}
}
Run Code Online (Sandbox Code Playgroud)
特别是这条线:
if let (key_: String, value_: AnyObject) = generate_.next()
Run Code Online (Sandbox Code Playgroud)
抛出错误:元组模式元素标签'key'必须是'_'
我已经尝试做出改变,但我没有工作......
有任何想法吗?
问题是:我们不能再在元组模式中使用类型注释了.
在发行说明中:
模式中不再允许使用类型注释,并将其视为异常声明的一部分.这意味着以前编写的代码如下:
Run Code Online (Sandbox Code Playgroud)var (a : Int, b : Float) = foo()需要写成:
Run Code Online (Sandbox Code Playgroud)var (a,b) : (Int, Float) = foo()如果需要显式类型注释.前一种语法与元组元素标签不明确.(20167393)
所以你可以:
if let (key_, value_): (String, AnyObject) = generate_.next() {
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,您可以省略: (String, AnyObject):
if let (key_, value_) = generate_.next() {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
490 次 |
| 最近记录: |