在 Swift 中这两个表达等效吗


class Car: Vehicle {
    var gear = 1
    override var description: String {
        return super.description + " in gear \(gear)"
    }
}

↑上与↓下的表达在 Swift 中是一样的吗,有什么区别?


class Car: Vehicle {
    var gear = 1
    override var description: String = super.description + " in gear \(gear)"
}

码字不易,有用望采纳 答案参考Chatgpt解答
在Swift中,上述两个表达式并不等效,它们有一些区别。

第一个表达式:

class Car: Vehicle {
    var gear = 1
    override var description: String {
        return super.description + " in gear \(gear)"
    }
}

在这个表达式中,description被声明为一个计算属性,它重写了父类Vehicle中的description属性。计算属性提供了自定义的getter方法,它将返回父类的description属性值加上额外的文本。

第二个表达式:

class Car: Vehicle {
    var gear = 1
    override var description: String = super.description + " in gear \(gear)"
}

在这个表达式中,description被直接赋值为一个字符串。它并不是一个计算属性,而是一个存储属性。在这种情况下,super.descriptiongear的值在赋值时就会被固定下来,而不是每次获取属性时计算。

因此,这两个表达式的区别在于description属性的性质(计算属性 vs 存储属性),以及如何处理父类属性和自身属性的组合。具体使用哪个表达式取决于您的需求和设计意图。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/246128
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:如何在Swift中找到列表项的索引?
  • 除此之外, 这篇博客: Swift之深入解析如何在Swift中实现状态机中的 ① 什么是状态机? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 我们直接使用维基百科上的定义:
    A finite-state machine (FSM) or finite-state automaton (FSA, plural: automata), finite automaton, or simply a state machine, is a mathematical model of computation.
    
    • 简而言之:通常称作的状态机是有限状态机的简称,它是一种数学计算模型。有限状态机(也就是有限自动机)如果进行一个分类的话,分类如下:

    在这里插入图片描述

    • 这只是看一个大概的分类,实际上这个有一个简单的认知就可以了,因为我们要探讨的种类主要就是 DFA(Deterministic Finite Automaton):确定性有限状态自动机,它也是最简单的一种状态机模型,下文中简称为状态机的都是确定性有限状态自动机。
    备注:分类本身是有各种分类方式的,这里采取是以是否有输出作为分类的前提,维基百科上的分类方式和此种分类不太一致,大家可以参考对比一下。
    
    • 那么确定性有限状态自动机有哪些特点呢?简单来讲就是每一种输入引起状态的变化是确定的,即一个状态对于同样的输入,只能有一种转换规则。
  • 您还可以看一下 李发展老师的Swift入门到实战课程[2022版]课程中的 Swift语言中的算法:冒泡排序算法小节, 巩固相关知识点