第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

在Swift中使用不同類型覆蓋超類屬性

在Swift中使用不同類型覆蓋超類屬性

慕碼人8056858 2019-11-12 12:46:33
在Swift中,有人可以解釋如何用原始屬性的子類覆蓋另一個(gè)超類的屬性嗎?舉一個(gè)簡單的例子:class Chassis {}class RacingChassis : Chassis {}class Car {    let chassis = Chassis()}class RaceCar: Car {    override let chassis = RacingChassis() //Error here}這給出了錯(cuò)誤:Cannot override with a stored property 'chassis'如果我將機(jī)箱設(shè)為“ var”,則會收到錯(cuò)誤消息:Cannot override mutable property 'chassis' of type 'Chassis' with covariant type 'RacingChassis'在指南中“覆蓋屬性”下唯一可以找到的內(nèi)容表明,我們必須覆蓋getter和setter,這可能會更改屬性的值(如果它是'var'),但是如何更改屬性類呢? ?
查看完整描述

3 回答

?
白衣染霜花

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊

Swift不允許您更改任何變量或?qū)傩缘念愵愋?。相反,您可以在子類中?chuàng)建一個(gè)額外的變量來處理新的類類型:


class Chassis {}

class RacingChassis : Chassis {}


class Car {

    var chassis = Chassis()

}

class RaceCar: Car {

    var racingChassis = RacingChassis()

    override var chassis: Chassis {

        get {

            return racingChassis

        }

        set {

            if newValue is RacingChassis {

                racingChassis = newValue as RacingChassis

            } else {

                println("incorrect chassis type for racecar")

            }

        }

    }

}

似乎無法使用let語法聲明屬性,而不能在其子類中用var覆蓋它,反之亦然,這可能是因?yàn)槌悓?shí)現(xiàn)可能不希望該屬性一旦初始化就更改。因此,在這種情況下,還需要在超類中使用'var'聲明屬性,以匹配子類(如上面的代碼段所示)。如果無法更改超類中的源代碼,則可能最好在每次需要更改底盤時(shí)銷毀當(dāng)前的RaceCar并創(chuàng)建一個(gè)新的RaceCar。

查看完整回答
反對 回復(fù) 2019-11-12
?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

這似乎有效


class Chassis {

    func description() -> String {

        return "Chassis"

    }

}

class RacingChassis : Chassis {

    override func description() -> String {

        return "Racing Chassis"

    }


    func racingChassisMethod() -> String {

        return "Wrooom"

    }

}


class Car {

    let chassis = Chassis()

}

class RaceCar: Car {

    override var chassis: RacingChassis {

    get {

        return self.chassis

    }

    set {

        self.chassis = newValue

    }

    }

}


var car = Car()

car.chassis.description()


var raceCar = RaceCar()

raceCar.chassis.description()

raceCar.chassis.racingChassisMethod()


查看完整回答
反對 回復(fù) 2019-11-12
  • 3 回答
  • 0 關(guān)注
  • 1519 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號