大佬教程收集整理的这篇文章主要介绍了arrays – 使用关联值映射swift枚举,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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 ..我想要一个简单的地图.但快速的语法并没有帮助我.
有任何想法吗?
/* 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 }}
以上是大佬教程为你收集整理的arrays – 使用关联值映射swift枚举全部内容,希望文章能够帮你解决arrays – 使用关联值映射swift枚举所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。