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

Swift-元类型.Type和.self有什么区别?

李辉
2023-03-14
问题内容

元类型.Type.selfSwift中有什么区别?

这样做.self.Type返回一个struct

我了解.self可以用来进行检查dynamicType。你怎么用.Type


问题答案:

这是一个简单的示例:

func printType<T>(of type: T.Type) {
    // or you could do "\(T.self)" directly and
    // replace `type` parameter with an underscore
    print("\(type)") 
}

printType(of: Int.self) // this should print Swift.Int


func printInstanceDescription<T>(of instance: T) {
    print("\(instance)")
}

printInstanceDescription(of: 42) // this should print 42

假设每个实体由两件事表示:

  • 类型: # entitiy name #

  • 元类型: # entity name # .Type

元类型类型是指任何类型的类型,包括类类型,结构类型,枚举类型和协议类型。

资源。

您会很快注意到这是递归的,并且可以通过诸如此类的类型(((T.Type).Type).Type)来实现。

.Type 返回一个元类型的实例。

我们可以通过两种方式获取元类型的实例:

  • 调用.self一个像Int.self这样的具体类型,它将创建一个 静态的元 类型实例Int.Type

  • 通过从任何实例获取 动态元 类型实例 type(of: someInstance)

危险区域:

struct S {}
protocol P {}

print("\(type(of: S.self))")      // S.Type
print("\(type(of: S.Type.self))") // S.Type.Type
print("\(type(of: P.self))")      // P.Protocol
print("\(type(of: P.Type.self))") // P.Type.Protocol

.Protocol是另一个仅在协议环境中存在的元类型。就是说,我们无法表达只想要的东西P.Type。这会阻止所有通用算法与协议元类型一起使用,并可能导致运行时崩溃。

对于更多好奇的人:

type(of:)由于.Protocol创建的不一致,该html" target="_blank">函数实际上由编译器处理。

// This implementation is never used, since calls to `Swift.type(of:)` are
// resolved as a special case by the type checker.
public func type<T, Metatype>(of value: T) -> Metatype { ... }


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

  • 问题内容: 是什么使类型不同于类,反之亦然? (与一般语言无关) 问题答案: 以下答案来自Gof书(“设计模式”) 对象的类定义了对象的实现方式。该类定义了对象的内部状态及其操作的实现。 相反,对象的 类型仅引用其接口-可以响应的一组请求。 一个对象可以具有许多类型,而不同类的对象可以具有相同的类型。 max函数需要一个类型为operation>且具有其自身类型的类型作为其接口之一,满足上述要求的

  • 问题内容: 这两个代码片段之间有什么区别?使用: 使用isinstance(): 问题答案: 总结答案的内容,迎合继承(派生类的实例也是基类的实例),而检查的相等性type则不(要求类型的标识并拒绝实例)子类型,又称为AKA子类)。 通常,在Python中,你当然希望你的代码支持继承(因​​为继承非常方便,因此停止使用你的代码来使用它会很糟糕!),因此它比检查的身份要糟糕得多,因为它无缝地支持s遗

  • 无法理解在字段中设置即搜索类型数据类型、在分析器中设置Edge NGram Tokenizer和添加index_prefixes参数之间的区别。在我看来,他们毕竟做了同样的工作。 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-as-you-type.htmlhttps://www.elastic.co/

  • 元类型、Type、Self AnyObject 代表任意类的instance, 也就是实例对象 类的类型 仅类遵守的协议 (Class-Only Protocols) Any 代表任意类型, 包括function和optional类型 AnyClass 代表任意实例的类型: AnyObject.Type public typealias AnyClass = AnyObject.Type T.se

  • 本文向大家介绍interface 和 type 到底有什么区别?相关面试题,主要包含被问及interface 和 type 到底有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 interface 和 type 到底有什么区别? 作者:rottenpen