gpt4 book ai didi

Swift "Is"类型检查运算符

转载 作者:行者123 更新时间:2023-11-30 13:37:35 25 4
gpt4 key购买 nike

我在学习 Swift 中的“Is”类型检查运算符时遇到了一个问题。我尝试在 Xcode 中执行以下代码,控制台中打印的结果确实让我感到困惑。

class Animal {}
class Dog: Animal {}
let dog: Animal = Dog()
let anotherDog = Dog()

print("\(dog.dynamicType)") //printed "(Dog #1)"

if dog is Animal {
print("dog is an Animal") //printed
}

if dog is Dog {
print("dog is a dog") //printed
}

if anotherDog is Animal {
print("another dog is an Animal") //printed
}

这是我的困惑:

1.

我从苹果的博客中学到了以下编程风格。 https://developer.apple.com/swift/blog/?id=23我不知道这是否是一种好的编程风格,因为 swift 可以进行类型推断。

let dog: Animal = Dog()

2.

我猜 (anInstance).dynamicType 可能是一个运行时功能来检查实例的类型。但是,我没有可以调用它的相关方法。那么我该如何使用它呢?

3.

let dog: Animal = Dog() 

狗实例的类型到底是什么?动物还是狗? “Is”运算符是否检查实例的编译时类型(Animal)和运行时类型(Dog)?或者甚至我对编译器时间类型和运行时类型的理解是错误的?

最佳答案

引用狗的类型是动物。因此你可以将它交给使用 Animals 的 api。但狗引用背后的实际类型将是 Dog。因此,您可以使用 is 测试实际类型,并且可以使用 as

(向下)强制转换为实际类型

关于Swift "Is"类型检查运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35912933/

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