【发布时间】:2019-01-06 19:17:49
【问题描述】:
为什么要在 Swift 中使用类型转换?
我正在学习语言并且遇到了类型转换的主题(例如向下和向上转换等),但在我看来这似乎有点麻烦。为什么要对对象进行类型转换?这在现实生活中的应用程序或代码中什么时候有用? 我在网上看了一会儿,但似乎找不到明确的答案。我真的坚持这一点,所以一些帮助会很棒!
提前致谢!
【问题讨论】:
标签: swift casting typecast-operator
为什么要在 Swift 中使用类型转换?
我正在学习语言并且遇到了类型转换的主题(例如向下和向上转换等),但在我看来这似乎有点麻烦。为什么要对对象进行类型转换?这在现实生活中的应用程序或代码中什么时候有用? 我在网上看了一会儿,但似乎找不到明确的答案。我真的坚持这一点,所以一些帮助会很棒!
提前致谢!
【问题讨论】:
标签: swift casting typecast-operator
这里的关键情况是向下转换。你会这样做,因为你可能知道一个对象的真正类型,但编译器不知道,所以它不会让你发送那个类型的消息给那个对象。
例子:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let dest = segue.destination as? FlipsideViewController {
dest.delegate = self
}
}
segue.destination 类型为 UIViewController;这只是一个事实,并不取决于你,因为 segue 的目的地需要能够是任何种 UIViewController。
只有你知道这个视图控制器实际上是一个FlipsideViewController。如果你不告诉编译器,你就不能设置它的delegate 属性(普通的 UIViewController 没有delegate 属性)。
总结一下:常见的向下转换的情况是当一个类型需要被声明为超类,因为任何子类需要是可接受的,但是在特定的实例中你知道什么 是它的子类,所以你需要对其进行转换。
【讨论】:
DataSource,它是核心,然后你创建了特定的MyTopicDataSource: DataSource,那么你可能想看看你是否正在处理 10 个或 20 个 MyTopicDataSource,你必须做出一些特殊的决定而没有为一种不同的行为编写一个全新的 VC。
当您不确定任何变量或类的类型时,会使用类型转换。 假设从服务器响应中设置了一个变量值。它可以是多个对象类型,如 String 、 Int 、 Double 。然后,您需要进行类型转换才能知道您要查找的确切类型。
【讨论】: