为什么我要在 Swift 中使用类型转换?
Why would I use typecasting in Swift?
为什么我要在 Swift 中使用类型转换?
我正在学习这门语言并且遇到了类型转换的主题(例如向下和向上转换等),但在我看来这似乎有点麻烦。为什么我要对一个对象进行类型转换?这什么时候在现实生活中的应用程序或代码中有用?
我在网上看了一会儿,但似乎找不到明确的答案。我真的坚持这个所以一些帮助会很棒!
提前致谢!
这里的关键案例是沮丧。你会这样做是因为 你 可能知道对象的真正类型,但 编译器 不知道,所以它不会让你将该类型的消息发送到该对象。
示例:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let dest = segue.destination as? FlipsideViewController {
dest.delegate = self
}
}
segue.destination
类型为UIViewController;这只是一个事实,并不取决于你,因为 segue 的目的地需要能够是 any 类型的 UIViewController。
只有你知道this视图控制器实际上是一个FlipsideViewController。如果你不告诉编译器,你就不能设置它的 delegate
属性 (普通的 UIViewController 没有 delegate
属性)。
所以总结一下:常见的向下转换情况是当一个类型需要被声明为超类时,因为 any 子类需要被接受,但是在一个特定的实例中你知道它是什么子类,所以你需要向下转换到那个。
当您不确定任何变量或 class 的类型时,使用类型转换。
假设一个变量值是从服务器响应中设置的。它可以是多种对象类型,如 String 、 Int 、 Double 。然后你需要类型转换来知道你正在寻找什么类型。
为什么我要在 Swift 中使用类型转换?
我正在学习这门语言并且遇到了类型转换的主题(例如向下和向上转换等),但在我看来这似乎有点麻烦。为什么我要对一个对象进行类型转换?这什么时候在现实生活中的应用程序或代码中有用? 我在网上看了一会儿,但似乎找不到明确的答案。我真的坚持这个所以一些帮助会很棒!
提前致谢!
这里的关键案例是沮丧。你会这样做是因为 你 可能知道对象的真正类型,但 编译器 不知道,所以它不会让你将该类型的消息发送到该对象。
示例:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let dest = segue.destination as? FlipsideViewController {
dest.delegate = self
}
}
segue.destination
类型为UIViewController;这只是一个事实,并不取决于你,因为 segue 的目的地需要能够是 any 类型的 UIViewController。
只有你知道this视图控制器实际上是一个FlipsideViewController。如果你不告诉编译器,你就不能设置它的 delegate
属性 (普通的 UIViewController 没有 delegate
属性)。
所以总结一下:常见的向下转换情况是当一个类型需要被声明为超类时,因为 any 子类需要被接受,但是在一个特定的实例中你知道它是什么子类,所以你需要向下转换到那个。
当您不确定任何变量或 class 的类型时,使用类型转换。 假设一个变量值是从服务器响应中设置的。它可以是多种对象类型,如 String 、 Int 、 Double 。然后你需要类型转换来知道你正在寻找什么类型。