当前位置: 首页 > 面试题库 >

Swift元类型(类型,自我)

慕翰学
2023-03-14
问题内容

我试图了解:“ self, dynamicType, Type”。我有这个代码:

class SomeClass {}

let cls : SomeClass.Type = SomeClass.self
let cls2 : SomeClass = SomeClass()

clscls2同一件事吗?

有人可以提供一些有关差异的细节吗?谢谢


问题答案:

没有,cls并且cls2是不同的东西。理解差异的最简单方法是像这样扩展您的示例

class SomeClass {
    class func doIt() {
        print("I'm a class method. I belong to my type.")
    }

    func doItOnlyIfInstanceOfThisType() {
        print("I'm a instance method. I belong to my type instance.")
    }
}

现在让您开始cls

let cls : SomeClass.Type = SomeClass.self
cls.doIt()

那将打印I'm a class method. I belong to my type.。但是您不能调用此:

cls.doItOnlyIfInstanceOfThisType() // causes a compilation error, PRO TIP: actually you can use this method as a func property, but I'll add the explanation for this later

让我们来吧cls2。它唯一可见的方法是doItOnlyIfInstanceOfThisType因为它是一个实例方法(这种类型)。

let cls2 : SomeClass = SomeClass()
cls2.doItOnlyIfInstanceOfThisType()

因此,它们之间的区别在于这cls是一个类型,并且cls2是该类型的实例。

有关为何SomeClass.self和SomeClass()的更多知识?

类的类型也存在于内存中(例如,它具有自己的方法),作为表示Type的单例(不是该类型的实例-
有所不同)。如果调用self这样的Type,SomeClass.self您将获得一个表示SomeClassType 的单例实例。

SomeClass()调用的init()方法,该方法SomeClass创建一个的实例的构造函数SomeClass

专家提示

您可以操纵Type实例函数(例如ObjC中的闭包/块)。这是一个生成的类方法。但是您必须将采用此方法的类型的实例作为参数传递,如下所示:

let myFunc :()->() = cls.doItOnlyIfInstanceOfThisType(cls2)
myFunc()


 类似资料:
  • 元类型和? 做和返回一个? 我知道可以用来检查。你如何使用?

  • 问题内容: 我正在尝试使用泛型动态创建基于实例的类型,但是在类自省时遇到了困难。 这里是问题: 有一个Swift相当于Obj-C的吗? 有没有办法使用from 的结果实例化一个类? 有没有一种方法可以严格从通用参数获取信息或以其他方式键入信息?(类似于C#的语法) 问题答案: 那么,对于一个,雨燕等同的IS (见元类型的文档,但他们非常薄)。 实际上,它甚至都不起作用!您必须使用。 同样,我尝试了

  • 主要内容:1.强制解包,2.自动解包,3.Optional绑定Swift 4还引入了类型,它处理缺少值。 简单的解释是:“有一个值,它等于x”或“根本没有值”。 一个本身就是一种类型,实际上是Swift 4的新超级枚举之一。 它有两个可能的值,和,其中是Swift 4中可用的正确数据类型的关联值。 这是一个的整数声明 - 下面是一个的声明 - 通过以下示例来了解如何在Swift 4中工作 - 当使用playground运行上述程序时,得到以下结果 - 类似于

  • 主要内容:定义类层次结构,类型检查,向下转换在Swift 4语言中类型转换用于检查实例类型是属于特定的超类还是子类,还是在自己的层次结构中定义。 Swift 4类型转换提供两个运算符和来检查值的类型,并将类型值转换为不同的类型。 类型转换还检查实例类型是否遵循特定的协议一致性标准。 定义类层次结构 类型转换用于检查实例的类型,以确定它是否属于特定的类类型。 此外,它还检查类及其子类的层次结构,以检查并转换这些实例,使其成为同一层次结构。 当

  • 主要内容:1. 内置数据类型,2. 界限值,3. 类型别名,4. 类型安全,5.类型推断在使用任何编程语言进行编程时,都需要使用不同类型的变量来存储信息。 变量只是用于存储值的保留内存位置。 这意味着在创建变量时,会在内存中保留一些空间。 您可能希望存储各种数据类型的信息,如字符串,字符,宽字符,整数,浮点,布尔值等。根据变量的数据类型,操作系统分配内存并决定可以在保留内存中存储什么类型的内容。 1. 内置数据类型 Swift 4为程序员提供了丰富的内置和用户定义的数据类型。 在声明

  • Swift 语言类型转换可以判断实例的类型。也可以用于检测实例类型是否属于其父类或者子类的实例。 Swift 中类型转换使用 is 和 as 操作符实现,is 用于检测值的类型,as 用于转换类型。 类型转换也可以用来检查一个类是否实现了某个协议。 定义一个类层次 以下定义了三个类:Subjects、Chemistry、Maths,Chemistry 和 Maths 继承了 Subjects。 代