Swift   发布时间:2022-04-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了arrays – 使用关联值映射swift枚举大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我们有一个有相关值类型的枚举.在下面的示例中,两个值类型是包含图像的简单对象和要共享的URl.

enum Content {
  case Image(ShareableImagE)
  case Video(ShareableVideo)
}

现在让我们来看一系列视频和图像案例.

let media: [Content] = [*a lot of enum cases inside here*]

到目前为止,上面的所有代码都无法在代码库中以任何方式进行更改,我需要使用它.

这开始我的问题:

让我们用媒体过滤数组,只对图像情况进行过滤

let imageOnlyCases: [Content] = media.filter { item -> Bool in

        switch item {
        case .Image: return true
        default: return false
        }
    }

下一步,我想从枚举数组获取其关联值的数组

[Content] -> [ShareableImage] by using map.

所以我这样做

let shareablemages = imageOnlyCases.map { imageCase -> ShareableImage in

        switch imageCase {

        case .Image(let imagE): return image
        default: return  what TO DO HERE?
        }
    }

你看,我有一个返回类型的问题..我知道枚举案例都是.Image ..我想要一个简单的地图.但快速的语法并没有帮助我.

有任何想法吗?

解决方法

你可以返回case.Image的图像,否则在.flatMap操作中返回nil(以“过滤掉”nil条目):

/* Example */
enum Foo {
    case Bar(int)
    case Baz(int)
}

let foo: [Foo] = [.bar(1),.bar(9),. Baz(3),.bar(39),.baz(5)]

/* 1. using 'switch' */
let barOnlyValues: [Int] = foo.flatMap {
    switch $0 {
    case .bar(let val): return val
    case _: return nil
    }}

/* 2. alternatively,as pointed out in MarTinR:s answer; 
      as you're only looking for a single case,the alternative
      'if case let' clause Could be preferred over 'switch':     */
let barOnlyValuesAlt: [Int] = foo.flatMap {
    if case let .bar(val) = $0 { return val }
    else { return nil }}                               

print(barOnlyValues) // [1,9,39]

应用于您的用例:请注意,您无需执行过滤来创建imageOnlyCases数组,因为您可以直接在媒体数组上应用上述内容

/* 1. using switch */
let shareableImages : [ShareableImage] = media.flatMap {
    switch $0 {
    case .Image(let imagE): return image
    case _: return nil
    }}

/* 2. 'if case let' alternative,as per MarTinR:s suggestion */
let shareableImagesAlt : [ShareableImage] = media.flatMap {
    if case let .Image(imagE) = $0 { return image }
    else { return nil }}

免责声明:我无法在实践中验证您的具体用例,因为我无权访问ShareableImage类/结构.

(感谢@marTinR的建议,即.map {…} .flatMap {…}可以简化为.flatMap {…}).

大佬总结

以上是大佬教程为你收集整理的arrays – 使用关联值映射swift枚举全部内容,希望文章能够帮你解决arrays – 使用关联值映射swift枚举所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。