sss*_*ver 2 functional-programming swift
在此代码片段中,我尝试映射[RegisteredMediaAttachment]到[BasicAttachmentInput],但仅限于那些具有可解析 的项目uploadUrl。
private func createSecondaryAttachments(
_ attachments: [RegisteredMediaAttachment]
) -> [BasicAttachmentInput] {
return attachments.compactMap {
guard let name = URL(string: $0.registration.uploadUrl) else {
return nil
}
return BasicAttachmentInput(
name: name,
contentType: $0.attachment.type.mime(),
sizeBytes: $0.attachment.data.count,
mediaId: $0.registration.media.id
)
}
}
Run Code Online (Sandbox Code Playgroud)
然而,斯威夫特在网上抱怨return nil说'nil' is not compatible with closure result type 'BasicAttachmentInput'
这让我很惊讶。我希望该函数编译并减少映射结果以仅包含nil从compactMap闭包返回的非值。上面的片段有什么问题?
事实证明 Swift 未能正确推断类型:只需用compactMap()隐含的返回类型注释闭包即可解决问题:
private func createSecondaryAttachments(
_ attachments: [RegisteredMediaAttachment]
) -> [BasicAttachmentInput] {
return attachments.compactMap { (attachment: RegisteredMediaAttachment) -> BasicAttachmentInput?
// Note the explicit return type signature of the closure above ^
guard let name = URL(string: $0.registration.uploadUrl) else {
return nil
}
return BasicAttachmentInput(
name: name,
contentType: $0.attachment.type.mime(),
sizeBytes: $0.attachment.data.count,
mediaId: $0.registration.media.id
)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |