热门标签 | 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`; 那是你在说什么?这条线至关重要.(嗯,这一切都至关重要;它们都在一起.)
推荐阅读
  • UIView的通用动画letviewUIView(frame:CGRectMake(10.0,10.0,100.0,40.0))self.view.addSubview(vie ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • java.lang.Class.getDeclaredMethod()方法java.lang.Class.getDeclaredMethod()方法用法实例教程-方法返回一个Met ... [详细]
  • swift中的uitable
    下面是一个静态的tableview于图可知有两个section头是11..和22..,其中222是一个tableviewcell!并且从图可知道样式是leftD ... [详细]
  • 我正在使用NavigatonView和NavigationLink,我的观点是这样的:ScrollView{VStack ... [详细]
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社区 版权所有