我正在开发一个基于Swift3的项目,然后升级到Swift 4.通过将Toolchain > Swift Development Snapshot
切换到XCode 9.2
,XCode显示与compactMap
相关的3个错误:
错误:类型的值' [收据信息]' (又名'数组>')没有会员' compactMap'
let receiptItems = nonCancelledReceiptsInfo.compactMap { ReceiptItem(receiptInfo: $0) }
return receiptItems.compactMap {
if let expirationDate = $0.subscriptionExpirationDate {
return (expirationDate, $0)
}
return nil
}
不幸的是,我对XCode和Swift了解不多。我需要等效的Swift 4代码。我感谢任何帮助。
答案 0 :(得分:3)
正如Hamish所提到的,这是正确的。在Swift 4.0.x中的Swift 4.1 check here中引入了compactMap( :),其flatMap( :) check here已被弃用。
let receiptItems = nonCancelledReceiptsInfo.flatMap { ReceiptItem(receiptInfo: $0) }
return receiptItems.flatMap {
if let expirationDate = $0.subscriptionExpirationDate {
return (expirationDate, $0)
}
return nil
}