【问题标题】:Why would I use typecasting in Swift?为什么我要在 Swift 中使用类型转换?
【发布时间】:2019-01-06 19:17:49
【问题描述】:

为什么要在 Swift 中使用类型转换?

我正在学习语言并且遇到了类型转换的主题(例如向下和向上转换等),但在我看来这似乎有点麻烦。为什么要对对象进行类型转换?这在现实生活中的应用程序或代码中什么时候有用? 我在网上看了一会儿,但似乎找不到明确的答案。我真的坚持这一点,所以一些帮助会很棒!

提前致谢!

【问题讨论】:

标签: swift casting typecast-operator


【解决方案1】:

这里的关键情况是向下转换。你会这样做,因为可能知道一个对象的真正类型,但编译器不知道,所以它不会让你发送那个类型的消息给那个对象。

例子:

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。
  • 我浏览了你刚刚给我的链接,但这似乎让我更加复杂。接受 Dog 类型参数的整个函数,为什么不接受 NoisyDog 类型的参数?
  • 但那是人为的;我在上面的答案中给你的例子是非常真实的。
【解决方案2】:

当您不确定任何变量或类的类型时,会使用类型转换。 假设从服务器响应中设置了一个变量值。它可以是多个对象类型,如 String 、 Int 、 Double 。然后,您需要进行类型转换才能知道您要查找的确切类型。

【讨论】:

    猜你喜欢
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多