【问题标题】:Swift 2 to 3 Migration for AnyObject JSON ErrorAnyObject JSON 错误的 Swift 2 到 3 迁移
【发布时间】:2016-09-29 00:58:06
【问题描述】:

我正在尝试将此库 (https://github.com/dankogai/swift-json) 中的以下代码转换为 Swift 3 兼容代码。

只剩下几个错误需要解决。我现在卡在这条线上了。

extension JSON : Sequence {

我得到的错误是 'Type 'JSON' does not conform to protocol 'Sequence'

它的完整上下文如下。我查看了源代码以查看 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)!))

两者都给出相同的错误,'Cannot convert return expression of type '(String,JSON)' to return type '(AnyObject, JSON)?'

我假设我必须将返回语句中的值 i 和 k 强制转换为 AnyObject?不过我不确定。

这是它给我的建议的详细截图。不知道如何更改代码。

【问题讨论】:

  • 尝试用Any替换AnyObject

标签: json swift swift2 swift3 ios10


【解决方案1】:

return (i, JSON(o[i])) ===> return (i as AnyObject, JSON(o[i]))

swift3 中的数据类型比 swift2 更严格。

【讨论】:

  • 这也会修复序列部分吗?我现在就试试。
  • 序列错误仍然说不符合序列任何想法?
  • 您确实帮助修复了返回错误,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 2017-02-09
  • 2019-01-17
  • 1970-01-01
  • 2017-02-01
相关资源
最近更新 更多