过滤字典在Xcode中失败,但成功在游乐场
在斯威夫特4游乐场验证码:过滤字典在Xcode中失败,但成功在游乐场
let time = 1234
let description: String? = nil
let keyed: [String : Any?] = [
"time": time,
"description": description
]
let filtered: [String : String] = keyed
.filter{ _, value in value != nil }
.mapValues { value in return String(describing: value!) }
print(keyed)
print(filtered)
产生这样的输出:
["description": nil, "time": Optional(1234)]
["time": "1234"]
这正是我想要的(只键值对,其中原始值不是nil
,值解包并转换为字符串)。但是,在Xcode 9(测试版3)中,我的构建失败,出现在'filter' is unavailable
。这是一个测试¯\_(ツ)_/¯
类的事情,还是我错过了什么?
我想这个解决一些方法,包括重新启动的Xcode,清除DerivedData
等,但在当时没有奏效。几天后我又回到了这个项目,发现之前编译的代码现在没有问题(没有做过任何相关的修改)。所以我将这归咎于Xcode 9 beta的一个怪癖。或者,也许某些东西只是被粘在某个地方,Xcode最终清除了一个缓存或者其他类似的东西。 ¯\_(ツ)_/¯
您在使用雨燕3.2,而不是斯威夫特4.
您可以将目标的Build Options
>Swift Compiler - Language
>Swift Language Version
摘录下从基金会的文档进行更改: https://developer.apple.com/documentation/swift/dictionary/2903389-filter?changes=latest_minor
func filter(_ isIncluded: (Dictionary.Element) throws -> Bool) rethrows -> [Dictionary.Key : Dictionary.Value]
的Xcode 9.0或更高版本
今天我有同样的问题。
我的项目是用xCode 8.x在Swift 3.x中创建的。升级到xCode 9后,它一直工作正常,直到今天'filter is unavailable'
错误启动。
明确将语言版本设置为Swift 4并没有解决它。 (也没有清理项目,重新启动xCode等)
这个诀窍 - 这对我来说是 - 转换为整个项目为Swift 4。
(我用的开始与编辑迁移工具/转换/到目前雨燕的语法,这是不是在5月的情况下太大的帮助,但是这是一个完全不同的事情。)
的错误走后。 ..
我无法重现相同的结果。在用Xcode 9 beta 3创建的一些项目中,您的代码编译时没有问题,并生成您期望的输出。你的环境中有什么特别的东西? – OOPer
嗯。我无法想象如此。尽我所知,我正在使用Xcode的完全香草安装。感谢您确认它在您的最终编译。我会看看我能否弄清楚发生了什么事。 – Subject22