Error[8]: Undefined offset: 3, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我有一个协议,’VariousThings’,以及两个符合它的类,’ThingType1’和’ThingType2′.我把这两类类的一些对象放入一个包含’VariousThings’的数组中.我现在想要从该数组中取出所有类型为’ThingType2’的对象.我怎样才能做到这一点? 这是我到目前为止所拥有的: protocol VariousThings: class {}class Thi 我有一个协议,’VarIoUsThings’,以及两个符合它的类,’ThingType1’和’ThingType2′.我把这两类类的一些对象放入一个包含’VarIoUsThings’的数组中.我现在想要从该数组中取出所有类型为’ThingType2’的对象.我怎样才能做到这一点?

这是我到目前为止所拥有的:

protocol VarIoUsThings: class {}class ThingType1: VarIoUsThings {}class ThingType2: VarIoUsThings {}let array: [VarIoUsThings] = [ThingType1(),ThingType2()]func itemsMatchingType(type: VarIoUsThings.Type) -> [VarIoUsThings] {    return array.filter { varIoUsThing in        return (varIoUsThing.self === type)    }}let justThingTypes1: [VarIoUsThings] = itemsMatchingType(ThingType1)
我会在这里使用flatMap而不是filter,以便为您提供更好的类型安全性.您可以使用条件向下转换来过滤掉所需的元素和泛型,以便保留类型信息.这利用了flatMap可以从转换函数中过滤掉nil结果的事实.
let array: [VarIoUsThings] = [ThingType1(),ThingType2()]    func itemsMatchingType<T:VarIoUsThings>(_ type: T.Type) -> [T] {    return array.flatMap {
func itemsMatchingType<T:VarIoUsThings>() -> [T] {    return array.flatMap {[+++] as? T}}let justThingTypes1 : [ThingType1] = itemsMatchingType()
as? T}}let justThingTypes1 = itemsMatchingType(ThingType1.self) // of type [ThingType1]

现在,如果传入ThingType1,那么从itemsMatchingType函数中获取的数组是[ThingType1],而不是简单地[VarIoUsThings].通过这种方式,您不必在以后处理丑陋的强迫性向下倾斜.

如果你真的想要花哨,你也可以删除type参数,让Swift通过显式类型注释推断出要过滤掉的类型:

[+++] 总结

以上是内存溢出为你收集整理的数组 – 在Swift中如何根据类别过滤符合协议的对象数组?全部内容,希望文章能够帮你解决数组 – 在Swift中如何根据类别过滤符合协议的对象数组?所遇到的程序开发问题。

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

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 4, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我有一个协议,’VariousThings’,以及两个符合它的类,’ThingType1’和’ThingType2′.我把这两类类的一些对象放入一个包含’VariousThings’的数组中.我现在想要从该数组中取出所有类型为’ThingType2’的对象.我怎样才能做到这一点? 这是我到目前为止所拥有的: protocol VariousThings: class {}class Thi 我有一个协议,’VarIoUsThings’,以及两个符合它的类,’ThingType1’和’ThingType2′.我把这两类类的一些对象放入一个包含’VarIoUsThings’的数组中.我现在想要从该数组中取出所有类型为’ThingType2’的对象.我怎样才能做到这一点?

这是我到目前为止所拥有的:

protocol VarIoUsThings: class {}class ThingType1: VarIoUsThings {}class ThingType2: VarIoUsThings {}let array: [VarIoUsThings] = [ThingType1(),ThingType2()]func itemsMatchingType(type: VarIoUsThings.Type) -> [VarIoUsThings] {    return array.filter { varIoUsThing in        return (varIoUsThing.self === type)    }}let justThingTypes1: [VarIoUsThings] = itemsMatchingType(ThingType1)
我会在这里使用flatMap而不是filter,以便为您提供更好的类型安全性.您可以使用条件向下转换来过滤掉所需的元素和泛型,以便保留类型信息.这利用了flatMap可以从转换函数中过滤掉nil结果的事实.
let array: [VarIoUsThings] = [ThingType1(),ThingType2()]    func itemsMatchingType<T:VarIoUsThings>(_ type: T.Type) -> [T] {    return array.flatMap {
func itemsMatchingType<T:VarIoUsThings>() -> [T] {    return array.flatMap { as? T}}let justThingTypes1 : [ThingType1] = itemsMatchingType()
as? T}}let justThingTypes1 = itemsMatchingType(ThingType1.self) // of type [ThingType1]

现在,如果传入ThingType1,那么从itemsMatchingType函数中获取的数组是[ThingType1],而不是简单地[VarIoUsThings].通过这种方式,您不必在以后处理丑陋的强迫性向下倾斜.

如果你真的想要花哨,你也可以删除type参数,让Swift通过显式类型注释推断出要过滤掉的类型:

[+++] 总结

以上是内存溢出为你收集整理的数组 – 在Swift中如何根据类别过滤符合协议的对象数组?全部内容,希望文章能够帮你解决数组 – 在Swift中如何根据类别过滤符合协议的对象数组?所遇到的程序开发问题。

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

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
数组 – 在Swift中如何根据类别过滤符合协议的对象数组?_app_内存溢出

数组 – 在Swift中如何根据类别过滤符合协议的对象数组?

数组 – 在Swift中如何根据类别过滤符合协议的对象数组?,第1张

概述我有一个协议,’VariousThings’,以及两个符合它的类,’ThingType1’和’ThingType2′.我把这两类类的一些对象放入一个包含’VariousThings’的数组中.我现在想要从该数组中取出所有类型为’ThingType2’的对象.我怎样才能做到这一点? 这是我到目前为止所拥有的: protocol VariousThings: class {}class Thi 我有一个协议,’VarIoUsThings’,以及两个符合它的类,’ThingType1’和’ThingType2′.我把这两类类的一些对象放入一个包含’VarIoUsThings’的数组中.我现在想要从该数组中取出所有类型为’ThingType2’的对象.我怎样才能做到这一点?

这是我到目前为止所拥有的:

protocol VarIoUsThings: class {}class ThingType1: VarIoUsThings {}class ThingType2: VarIoUsThings {}let array: [VarIoUsThings] = [ThingType1(),ThingType2()]func itemsMatchingType(type: VarIoUsThings.Type) -> [VarIoUsThings] {    return array.filter { varIoUsThing in        return (varIoUsThing.self === type)    }}let justThingTypes1: [VarIoUsThings] = itemsMatchingType(ThingType1)
我会在这里使用flatMap而不是filter,以便为您提供更好的类型安全性.您可以使用条件向下转换来过滤掉所需的元素和泛型,以便保留类型信息.这利用了flatMap可以从转换函数中过滤掉nil结果的事实.
let array: [VarIoUsThings] = [ThingType1(),ThingType2()]    func itemsMatchingType<T:VarIoUsThings>(_ type: T.Type) -> [T] {    return array.flatMap {
func itemsMatchingType<T:VarIoUsThings>() -> [T] {    return array.flatMap { as? T}}let justThingTypes1 : [ThingType1] = itemsMatchingType()
as? T}}let justThingTypes1 = itemsMatchingType(ThingType1.self) // of type [ThingType1]

现在,如果传入ThingType1,那么从itemsMatchingType函数中获取的数组是[ThingType1],而不是简单地[VarIoUsThings].通过这种方式,您不必在以后处理丑陋的强迫性向下倾斜.

如果你真的想要花哨,你也可以删除type参数,让Swift通过显式类型注释推断出要过滤掉的类型:

总结

以上是内存溢出为你收集整理的数组 – 在Swift中如何根据类别过滤符合协议的对象数组?全部内容,希望文章能够帮你解决数组 – 在Swift中如何根据类别过滤符合协议的对象数组?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1089823.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存