gpt4 book ai didi

Swift 4 : type(of:self). description() 不同于 String(describing: type(of:self))

转载 作者:搜寻专家 更新时间:2023-11-01 06:30:42 27 4
gpt4 key购买 nike

我需要在父类(super class)中实现的方法中确定对象的动态类型。父类(super class)称为 BaseClient,DisplayClient 继承自它。

我只需要类名,不需要包名。这是我尝试过的:

print("1", String(describing: type(of: self))) // DisplayClient
print("2", type(of: self)) // DisplayClient
print("3", type(of: self).description()) // package.DisplayClient
print("4", "\(type(of: self))") // DisplayClient

为什么

 type(of: self).description()

return package.DisplayClient 而其他的只返回类名?我想知道当我使用 String(describing: type(of: self)) 时内部调用的是什么。我假设这完全符合我的要求(调用 describing())。

我在哪里可以找到有关如何在内部生成字符串的更多信息?

docs说:

使用此初始化程序将任何类型的实例转换为其首选表示形式,如 String 实例。初始化程序根据其协议(protocol)一致性,以下列方式之一创建实例的字符串表示形式:

  • 如果实例符合 TextOutputStreamable 协议(protocol),则通过对空字符串 s 调用 instance.write(to: s) 获得结果。
  • 如果实例符合 CustomStringConvertible 协议(protocol),则结果为 instance.description。
  • 如果实例符合 CustomDebugStringConvertible 协议(protocol),则结果为 instance.debugDescription。
  • 未指定的结果由 Swift 标准库自动提供。

但是 type(of: self) 甚至没有描述属性。它只有一个 description() 方法。这是编译器以不同方式处理的一些特殊情况吗?

最佳答案

如果你的类继承自 NSObject 那么 type(of: self).description()调用 NSObject.description() class method :

class func description() -> String

NSObject's implementation of this method simply prints the name of the class.

并且没有记录是否包含模块名称。如果你的类没有继承自 NSObject 那么就没有默认的 description() 方法。

另一方面,

print(String(describing: type(of: self))) // DisplayClient
print(type(of: self)) // DisplayClient

两者都打印非限定类型名称,并且

print(String(reflecting: type(of: self))) // package.DisplayClient
debugPrint(type(of: self) ) // package.DisplayClient

两者都打印完全合格的类型名称,比较 How to get a Swift type name as a string with its namespace (or framework name)Xcode 7 Release Notes :

Type names and enum cases now print and convert to String without qualification by default. debugPrint or String(reflecting:) can still be used to get fully qualified names.

关于Swift 4 : type(of:self). description() 不同于 String(describing: type(of:self)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47813894/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com