快速覆盖实例属性(帮助)

Posted

技术标签:

【中文标题】快速覆盖实例属性(帮助)【英文标题】:Overriding a instance property in swift (help) 【发布时间】:2016-07-22 08:49:14 【问题描述】:

嗨,我最近开始学习 swift,在阅读继承章节时遇到了这个问题,所以我创建了一个车辆类作为我的超类和一个汽车类作为我的子类,汽车类继承自车辆类,之后我已经创建了一个 automaticCar 类作为另一个继承自 car 类的子类(如果有任何歧义,请参阅代码),所以当我尝试覆盖 dangerText 时,Xcode 似乎跳过了代码并且没有更改 dangerText :- ( 如果我做错了什么,请告诉我,我不是在寻找替代方法,因此请通过使用覆盖解决方案更正我的代码来回答 提前致谢!

import Foundation
class viehcle 
//SuperClass viehcle
var currentSpeed = 0
let maxSpeed = 180
var descripion:String
    return "Current speed is \(currentSpeed)"
 

class car:viehcle
//SubClass car inherits from viehcle
var currentGear = 1
var dangerText = ""
//override of description instance property
override var descripion: String
    return ("The current speed is \(super.currentSpeed) and the gear is \(currentGear) \(dangerText)")
 

class AutomaticCar:car
//SubClass AutomaticCar which inherits fom superClass car 


//override of dangerText instance property of car
override var dangerText: String
    didSet
        if currentSpeed>maxSpeed
            let slowDown = "Slow Down !"
            dangerText = dangerText.stringByAppendingString(slowDown)
        
    

//override current speed instance property of car
override var currentSpeed: Int
    didSet

        currentGear = (currentSpeed/40)+1

        if currentGear <= 4 

        currentGear = self.currentGear

        
        else
            currentGear = 4
           
       
  


var myCar = car() // obj/instance created from car class
var myAutomaticCar = AutomaticCar() // obj/instance created from AutomaticCar class
myAutomaticCar.currentSpeed = 300 // set Automatic car's current speed to 300

print(myCar.descripion)
print(myAutomaticCar.descripion)

【问题讨论】:

您的代码是正确的。它在 xcode 7.2 中运行良好。 它在我的 Xcode 中无法正常工作真的很奇怪,感谢您的回答!我的版本中没有打印减速文本?? 您收到什么错误? 您面临什么问题? xcode 给你什么错误? 如果您在覆盖的 dangerText 上设置断点,您会看到编译器不会在该行中断,之后不会打印减速文本! 【参考方案1】:

您在 AutomaticCar 类中犯了一个小错误。在那个类中不需要覆盖 dangerText,而不是当你将新值设置为 currentSpeed 时,只需更新危险文本,如下所示......

class AutomaticCar:car 
    override var currentSpeed: Int 
        didSet 
            currentGear = (currentSpeed/40)+1
            if currentGear <= 4 
                currentGear = self.currentGear
            
            else
                currentGear = 4
            
            if currentSpeed > maxSpeed 
                let slowDown = "Slow Down !"
                dangerText = dangerText.stringByAppendingString(slowDown)
            
        
    

现在检查 dangerText 将附带给定 currentSpeed 和 maxSpeed 的描述。

【讨论】:

以上是关于快速覆盖实例属性(帮助)的主要内容,如果未能解决你的问题,请参考以下文章

对OC中Category 的理解,以及方法覆盖的解决办法

Python:如何覆盖子类中实例属性的类型提示?

在单个 AppDomain 上运行多个应用程序实例时如何防止属性覆盖?

labview安装能覆盖吗

使用 CoreData,如果我有一个 @dynamic 属性,我可以像 @synthesized 一样覆盖它的 getter 吗? (惰性实例化)

快速覆盖 UIView 中的默认图层类型