【问题标题】:Differentiating Between a Struct and a Class in Swift区分 Swift 中的结构和类
【发布时间】:2015-03-03 14:12:25
【问题描述】:

我知道为什么我会使用结构而不是类,但我如何才能最好地判断我正在使用的 API 正在使用哪个?

显然,查看头文件(或希望是文档)应该会立即明白这一点。我想知道是否有办法知道我正在使用的对象是面值的结构还是类?

【问题讨论】:

    标签: class swift struct


    【解决方案1】:

    您不能从其他结构或类型继承。类可以从父类继承函数、变量和常量。

    在 swift 中,结构是值类型,而类是引用类型。使用值类型可以使您的代码不易出错。

    当您复制引用类型变量时,两个变量都引用内存中的同一个对象。改变其中一个变量将改变另一个。

    当您复制值类型变量时,完整的变量会被复制到内存中的新位置。对其中一个副本的更改不会更改另一个副本。如果复制对象的成本很低,那么复制比共享内存要安全得多。

    【讨论】:

      【解决方案2】:

      Xcode 中的自动补全知道类型的类型:

      【讨论】:

        【解决方案3】:

        我不确定您所说的“面值”是什么意思。您可以通过使用reflect 获取对象的MirrorType 并检查MirrorTypeobjectIdentifier 属性来测试对象是否是类的实例,如下所示:

        struct TestStruct { }
        class TestClass { }
        
        let testStruct = TestStruct()
        let testClass = TestClass()
        
        if let x = reflect(testStruct).objectIdentifier {
            println("I am a class...")
        } else {
            println("I am not a class...")    // prints "I am not a class..."
        }
        
        if let x = reflect(testClass).objectIdentifier {
            println("I am a class...")        // prints "I am a class..."
        } else {
            println("I am not a class...")
        }
        

        这个答案可能在即将发布的 Swift 1.2 中已经过时(我没有新的 xCode 测试版,所以我不能肯定地说),我知道它有更好的对象自省,但这确实可以解决问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-17
          • 2016-07-14
          • 2010-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-21
          相关资源
          最近更新 更多