Swift3升级Swift4后报错:'[ReceiptInfo]'类型无compactMap成员如何解决?
解决Swift 4升级中compactMap的报错问题
嘿,我来帮你搞定这个问题!
你遇到的报错核心原因是:compactMap是Swift 4.1才正式加入的API,而Xcode 9.2默认配套的是Swift 4.0——哪怕你切换到了Swift开发快照,部分早期的4.x版本快照也还没包含这个方法。
Swift 4.0等效代码替换
在Swift 4.0中,你可以直接用flatMap来替代compactMap的功能。因为在Swift 3到4.0的过渡阶段,flatMap还保留着「过滤转换后为nil的元素」这个重载逻辑,这个功能直到Swift 4.1才被拆分出来命名为compactMap。
举个具体的代码示例:
假设你原来的代码是这样的:
let processedReceipts = receiptInfos.compactMap { receiptInfo -> String? in // 你的转换逻辑,可能返回nil或非nil值 return receiptInfo.validatedValue() }
把它改成Swift 4.0兼容的版本,只需要替换方法名:
let processedReceipts = receiptInfos.flatMap { receiptInfo -> String? in // 保留完全相同的转换逻辑 return receiptInfo.validatedValue() }
额外说明
等之后你升级到Xcode 10或更高版本(对应Swift 4.1及以上),就可以把flatMap改回compactMap了——因为那时候flatMap的这个重载会被标记为废弃,官方推荐使用语义更清晰的compactMap。
内容的提问来源于stack exchange,提问作者Kardo
相关产品推荐
相关产品推荐

