这个问题在这里已经有了答案:DifferencebetweenflatMapandcompactMapinSwift(3个答案)关闭4年前。我有结构类型对象的数组AstructCaste{vararr=[1,2]}letsiri=[Caste(),Caste(),Caste()]现在我想要一个单一的数组,其中每个对象数组的所有元素如下所示:letre1=siri.compactMap{$0.arr}print("COMPACT:\(re1)")letre2=siri.flatMap{$0.arr}print("FLAT:\(re2)")结果:紧凑型:[[1,2],[1,2],[1,2]
我希望allMembers是[Member]类型。但它的类型是[[Member]]。为什么compactMap不返回[Member]类型的结果?classTeam{letmembers=Array(repeating:Member(),count:2)}classMember{}letteams=Array(repeating:Team(),count:3)letallMembers=teams.compactMap{$0.members} 最佳答案 你实际上需要flatMap,不是compactMap.即使以前(Swift4.1之
我正在开发一个基于Swift3构建的项目,然后升级到Swift4。通过将Toolchain>SwiftDevelopmentSnapshot切换到XCode9.2,XCode显示3与compactMap相关的错误:错误:类型“[ReceiptInfo]”(又名“Array>”)的值没有成员“compactMap”letreceiptItems=nonCancelledReceiptsInfo.compactMap{ReceiptItem(receiptInfo:$0)}returnreceiptItems.compactMap{ifletexpirationDate=$0.subscr
我正在开发一个基于Swift3构建的项目,然后升级到Swift4。通过将Toolchain>SwiftDevelopmentSnapshot切换到XCode9.2,XCode显示3与compactMap相关的错误:错误:类型“[ReceiptInfo]”(又名“Array>”)的值没有成员“compactMap”letreceiptItems=nonCancelledReceiptsInfo.compactMap{ReceiptItem(receiptInfo:$0)}returnreceiptItems.compactMap{ifletexpirationDate=$0.subscr
每隔一段时间,我必须沿着响应链向上走,才能到达已知类的实例。(只是为了问题的目的接受这个。)我一直在用一个while循环来做这个,但我想到使用sequence()会更酷,它可以表达响应者像这样整齐地链接自己:letchain=sequence(first:someViewasUIResponder){$0.next}这太棒了,因为到目前为止我们还没有真正进行过任何步行;该序列是惰性的,直到我们开始请求元素时才会执行匿名函数。为了证明这一点,让我用打印语句检测该代码:letchain=sequence(first:someViewasUIResponder){rinprint(r);re
在Swift4.1之前,我使用flatMap从集合中删除nil值。现在此方法已弃用,我需要将其替换为compactMap。有时我使用带有惰性集合的flatMap来优化我的代码,就像这样:letoptionalIntegers:[Int?]=[1,2,nil,3,4,nil,nil,5]optionalIntegers.lazy.flatMap{$0}.forEach{print("Item\($0*10)")}如果我使用compactMap而不是flatMap会有同样的效果吗?在方法lazy的文档中,我发现仅引用了map和filter。 最佳答案
我已经从多个教程中学习了flatMap/compactMap用于flattenarrayofarray但在我的情况下它不起作用或者我没有正确理解它.letmyArray=[["Raja","Kumar",nil,"Waqas"],["UAE","SINGAPORE","dUBAI","HONGKONG"]]letfinal=myArray.compactMap{$0}print("Result:\(final)")输出:Result:[[Optional("Raja"),Optional("Kumar"),nil,Optional("Waqas")],[Optional("UAE"),
考虑这个代码片段:vara:String?="abc"varb:String?letresult=[a,b].compactMap{$0}执行后,result为["abc"]这是预期的结果。这里result的元素(ElementOfResult)是String。print(type(of:result))Array现在到了有趣的部分。将代码段更改为之后vara:String?="abc"varb:Int?letresult=[a,b].compactMap{$0}并执行它,结果将是[Optional("abc"),nil]这里result(ElementOfResult)的元素是Any
似乎在Swift4.1flatMap中被弃用了。但是Swift4.1compactMap中有一个新方法在做同样的事情吗?使用flatMap,您可以转换集合中的每个对象,然后删除所有为nil的项目。喜欢flatMapletarray=["1","2",nil]array.flatMap{$0}//willreturn"1","2"喜欢compactMapletarray=["1","2",nil]array.compactMap{$0}//willreturn"1","2"compactMap也在做同样的事情。这两种方法有什么区别?为什么Apple决定重命名该方法?