如何判断Swift中实例变量的类是什么

 新疆盛苑烟酒特产_485 发布于 2023-01-11 10:17

有没有简单的方法来告诉classSwift中的实例变量是什么?在我习惯的基于JVM的语言中,你可以做类似的事情println(value.class)来获得它的类.

在Swift中有相同的东西吗?

我在文档中最接近的是能够使用is 关键字进行"类型检查",但这只能帮我猜一点.

我遇到过一些情况,我认为我有一种类型,但实际上有另一种,并且不知道如何确定.

2 个回答
  • 从beta 6开始,_stdlib_getTypeName获取变量的错位类型名称.将其粘贴到空的操场上:

    import Foundation
    
    class PureSwiftClass {
    }
    
    var myvar0 = NSString() // Objective-C class
    var myvar1 = PureSwiftClass()
    var myvar2 = 42
    var myvar3 = "Hans"
    
    println( "TypeName0 = \(_stdlib_getTypeName(myvar0))")
    println( "TypeName1 = \(_stdlib_getTypeName(myvar1))")
    println( "TypeName2 = \(_stdlib_getTypeName(myvar2))")
    println( "TypeName3 = \(_stdlib_getTypeName(myvar3))")
    

    输出是:

    TypeName0 = NSString
    TypeName1 = _TtC13__lldb_expr_014PureSwiftClass
    TypeName2 = _TtSi
    TypeName3 = _TtSS
    

    Ewan Swick的博客文章有助于破译这些字符串:

    例如_TtSi代表Swift的内部Int类型.

    Mike Ash有一篇很棒的博客文章,涵盖了相同的主题.

    2023-01-11 10:17 回答
  • 使用type.self返回可以传递到接受一个类型级参数的方法的类型.例如,UILabel.self可以传递给isKindOfClass方法调用.可以通过dynamicType.description()以下方式找到类的字符串表示:

    var label = UILabel()
    println(label.dynamicType.description())
    println(label.isKindOfClass(UILabel.self))
    

    斯威夫特-3

    var label = UILabel()
    println(type(of: label).description())
    

    输出
    UILabel为
    true

    这里有一些背景知识 - 有两个表达式需要注意:后缀自我表达和动态类型表达式.来自文档:

    Postfix Self
    后缀自我表达由一个表达式或一个类型的名称组成,紧接着是.self.它有以下形式:

    expression.self
    type.self
    

    第一个表单计算表达式的值.例如,x.self计算为x.

    第二种形式评估类型的值.使用此表单可以将类型作为值进行访问.例如,因为SomeClass.self计算SomeClass类型本身,您可以将它传递给接受类型级参数的函数或方法



    动态类型表达式
    dynamicType表达式由一个表达式组成,后面紧跟着.dynamicType.它具有以下形式:

    expression.dynamicType
    

    表达式不能是类型的名称.整个dynamicType表达式求值为表达式的运行时类型的值.

    2023-01-11 10:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有