我试图将以下代码从此库(https://github.com/dankogai/swift-json)转换为Swift 3兼容代码。
只剩下几个错误要解决。我现在坚持这条线。
extension JSON : Sequence {
我得到的错误是' Type' JSON'不符合协议'序列'
其完整背景如下。我查看了源代码,看看Sequence是否已作为协议存在,以了解如何符合但不确定它来自何处。我知道这在Swift 2中有效。
extension JSON : Sequence {
public func generate()->AnyIterator<(AnyObject,JSON)> {
switch _value {
case let o as NSArray:
var i = -1
return AnyIterator {
i=i+1
if i == o.count { return nil }
return (i, JSON(o[i]))
}
case let o as NSDictionary:
var ks = Array(o.allKeys.reversed())
return AnyIterator {
if ks.isEmpty { return nil }
if let k = ks.removeLast() as? String {
return (k, JSON(o.value(forKey: k)!))
} else {
return nil
}
}
default:
return AnyIterator{ nil }
}
}
public func mutableCopyOfTheObject() -> AnyObject {
return _value.mutableCopy as AnyObject
}
}
如果以某种方式连接,则返回语句也会出错。
return (i, JSON(o[i]))
和...
return (k, JSON(o.value(forKey: k)!))
两者都给出相同的错误,&#39;无法转换类型&#39;(String,JSON)&#39;的返回表达式。返回类型&#39;(AnyObject,JSON)?&#39;
我假设要修复我必须将返回语句中的值i和k转换为AnyObject?我不确定。
以下是我给出的建议的详细截图。不知道如何更改代码。
答案 0 :(得分:1)
return(i,JSON(o [i]))===&gt; return(我作为AnyObject,JSON(o [i]))
swift3中的数据类型比swift2更严格。