热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Array.map()产生'[T]',而不是预期的上下文结果类型''String:Any?]'

如何解决《Array.map()产生'[T]',而不是预期的上下文结果类型''String:Any?]'》经验,为你挑选了2个好方法。

我正在编写一个扩展来桥接FirebaseDatabase和Eureka之间的字典值.

private extension Dictionary {
    func firebaseFriendlyDictionary() -> [String: Any?] {
        return self.map({ (key: String, value: Any?) -> (String, Any?) in
            if value is NSDate {
                return (key, (value as! NSDate).timeIntervalSince1970)
            }
            return (key, value)
        })
    }
}

但是当我尝试构建时,我会抛出此错误:

map produces '[T]', not the expected contextual result type '[String: Any?]'



1> Losiowaty..:

你的问题在于这样一个事实,即使应用于a ,它map总会返回Array一个Dictionary.您的错误消息基本上意味着,您将方法声明为返回a Dicitonary,但语句内部返回一个Array([T]- 表示具有某种类型T的对象的Array ).在您的情况下,返回的数组map将包含元组(这里更多关于它们).在这种情况下,它看起来像一个键值对,但它不等同于Dictionary中的键值对.基本上,元组使您可以从方法返回多个值/对象.您可以将它们视为匿名结构.

在我看来,没有必要使用a map来完成你需要的东西--Xcoder先生提供的解决方案是要走的路.


标记为正确答案,以便清楚地解释.简而言之:元组数组≠字典...`[(String,Any?)]≠[String:Any?]`.谢谢!

2> matt..:

如果你真的想要使用类似功能的东西map,你真正想要的方法是reduce.

我会证明.为了使事情尽可能清楚,我认为如果我们将您的价值观所经历的转变分离出来,将会有所帮助:

func dateToSeconds(_ thing:Any?) -> Any? {
    guard let date = thing as? Date else {return thing}
    return date.timeIntervalSince1970
}

好的,所以这是我们的测试词典:

let d1 : [String:Any?] = ["1":Date(), "2":"two", "3":15, "4":true]

现在我们准备申请了reduce.它将两个参数传递给它的函数.第一个是"累加器",我们不断建立最终结果,在这种情况下是另一个字典.第二个是原始词典的一个元素,表示为元组称为键-值对的keyvalue:

let d2 = d1.reduce([String:Any?]()) { (dict, tuple) in
    var dict = dict
    dict[tuple.key] = dateToSeconds(tuple.value)
    return dict
}

当我们检查时d2,我们看到我们得到了正确的答案:

d2 // ["3": {some 15}, "2": {some "two"}, "1": {some 1486228695.557882}, "4": {some true}]


我不知道你在做什么,但我向你展示的确有效.请注意,在我的`reduce`函数的第一行,我将`dict`分配给`var`; 那是你在说什么?这条线至关重要.(嗯,这一切都至关重要;它们都在一起.)
推荐阅读
author-avatar
h38868863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有