gpt4 book ai didi

swift - 苹果自己的 Swift 文档关于动态类型与编译时类型似乎是错误的

转载 作者:行者123 更新时间:2023-11-30 10:08:40 24 4
gpt4 key购买 nike

引用文献:

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html

我们有:

class SomeBaseClass {
class func printClassName() {
print("SomeBaseClass")
}
}
class SomeSubClass: SomeBaseClass {
override class func printClassName() {
print("SomeSubClass")
}
}
let someInstance: SomeBaseClass = SomeSubClass()
// The compile-time type of someInstance is SomeBaseClass,
// and the runtime type of someInstance is SomeBaseClass
someInstance.dynamicType.printClassName()
// prints "SomeSubClass"

Use the identity operators (=== and !==) to test whether an instance’s runtime type is the same as its compile-time type.

if someInstance.dynamicType === someInstance.self {
print("The dynamic type of someInstance is SomeBaseCass")
}
else {
print("The dynamic type of someInstance isn't SomeBaseClass")
}

但是 someInstance.self 似乎引用了对象,而不是文档声称的对象的编译时类型。事实上,在 Xcode 7.2 中,即使我们将 someInstance 初始化为 SomeBaseClass,测试的结果也不会为 true。

它并不能激发人们对文档有拼写错误(SomeBaseCass)的信心。

我能找到让“true”子句触发的唯一方法是突变:

if someInstance.dynamicType == SomeBaseClass.self { ... } 

这很有趣,但错过了有缺陷的 Apple 文档试图展示的完全动态运行时类型检查功能。

谁错了,如何解决?

最佳答案

这是一个错字 - 向你致敬。该部分是关于元类型类型的,除了那一行之外,他们在整个部分中都使用 type_name.self 。

除此之外,dynamicType 的工作方式如宣传的那样 — 这里没有任何问题。

关于swift - 苹果自己的 Swift 文档关于动态类型与编译时类型似乎是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34519311/

24 4 0
文章推荐: swift - 这两个属性有什么区别?
文章推荐: javascript - 将双引号替换为反斜杠加上 JSON 中的双引号
文章推荐: java - 在 RecyclerView 中更改 CircleImageView 的边框
文章推荐: javascript - 如何使用 JavaScript 获取 HTML 中
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com