swift – 如何检查实例是否实现了CollectionType?

swift – 如何检查实例是否实现了CollectionType?,第1张

概述我正在定义一个打印出Any实例的函数.如果它是NSArray或CollectionType,它会打印出它拥有的项目数量和最多10个项目: static func prettyPrint(any: Any) -> String { switch any { case is NSArray: let array = any as! NSArray var 我正在定义一个打印出Any实例的函数.如果它是NSArray或CollectionType,它会打印出它拥有的项目数量和最多10个项目:

static func prettyPrint(any: Any) -> String {    switch any {    case is NSArray:        let array = any as! NSArray        var result: String = "\(array.count) items ["        for i in 0 ..< array.count {            if (i > 0) {                result += ","            }            result += "\(array[i])"            if (i > 10) {                result += ",..."                break;            }        }        result += "]"        return result    default:        assertionFailure("No pretty print defined for \(any.dynamicType)")        return ""    }}

我想为任何CollectionType添加一个case子句,但我不能,因为它是一个涉及泛型的类型.编译器消息是:协议’CollectionType’只能用作通用约束,因为它具有Self或关联类型要求
我只需要迭代和count属性来创建打印字符串,我不关心集合包含的元素的类型.

如何检查CollectionType<?>?

解决方法 你可以使用Mirror – 基于这样的东西……

func prettyPrint(any: Any) -> String {    var result = ""    let m = Mirror(reflecting: any)    switch m.displayStyle {    case .some(.Collection):        result = "Collection,\(m.children.count) elements"    case .some(.Tuple):        result = "Tuple,\(m.children.count) elements"    case .some(.Dictionary):        result = "Dictionary,\(m.children.count) elements"    case .some(.Set):        result = "Set,\(m.children.count) elements"    default: // Others are .Struct,.Class,.Enum,.Optional & nil        result = "\(m.displayStyle)"    }    return result}prettyPrint([1,2,3]) // "Collection,3 elements"prettyPrint(NSArray(array:[1,3])) // "Collection,3 elements"prettyPrint(Set<String>()) // "Set,0 elements"prettyPrint([1:2,3:4]) // "Dictionary,2 elements"prettyPrint((1,3)) // "Tuple,3 elements"prettyPrint(3) // "nil"prettyPrint("3") // "nil"

查看http://appventure.me/2015/10/24/swift-reflection-api-what-you-can-do/

总结

以上是内存溢出为你收集整理的swift – 如何检查实例是否实现了CollectionType?全部内容,希望文章能够帮你解决swift – 如何检查实例是否实现了CollectionType?所遇到的程序开发问题。

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

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

原文地址:https://www.54852.com/web/1002457.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存