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

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

Swift協(xié)議擴(kuò)展覆蓋

Swift協(xié)議擴(kuò)展覆蓋

紅糖糍粑 2019-11-13 14:55:55
我正在嘗試使用Swift協(xié)議擴(kuò)展,卻發(fā)現(xiàn)這種行為令人困惑。您能幫我得到我想要的結(jié)果嗎?請參閱代碼最后4行的注釋。(如果需要,可以將其復(fù)制粘貼到Xcode7游樂場)。謝謝!!//: Playground - noun: a place where people can playimport UIKitprotocol Color { }extension Color {  var color : String { return "Default color" } }protocol RedColor: Color { }extension RedColor { var color : String { return "Red color" } }protocol PrintColor {     func getColor() -> String}extension PrintColor where Self: Color {    func getColor() -> String {        return color    }}class A: Color, PrintColor { }class B: A, RedColor { }let colorA = A().color // is "Default color" - OKlet colorB = B().color // is "Red color" - OKlet a = A().getColor() // is "Default color" - OKlet b = B().getColor() // is "Default color" BUT I want it to be "Red color"
查看完整描述

3 回答

?
ABOUTYOU

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

簡短的答案是協(xié)議擴(kuò)展不執(zhí)行類多態(tài)性。這是有一定道理的,因?yàn)閰f(xié)議可以被結(jié)構(gòu)體或枚舉所采用,并且因?yàn)槲覀儾幌M麅H在沒有必要的地方采用協(xié)議來引入動(dòng)態(tài)調(diào)度。


因此,在中g(shù)etColor(),color實(shí)例變量(可能更準(zhǔn)確地寫為self.color)并不意味著您認(rèn)為它會(huì)做什么,因?yàn)槟谝灶惗鄳B(tài)的方式思考,而協(xié)議不是。所以這工作:


let colorB = B().color // is "Red color" - OK

...因?yàn)槟屢活悓W(xué)生解決問題color,但這并不能滿足您的期望:


let b = B().getColor() // is "Default color" BUT I want it to be "Red color"

...因?yàn)樵揼etColor方法完全在協(xié)議擴(kuò)展中定義。您可以通過getColor在B中重新定義來解決此問題:


class B: A, RedColor {

    func getColor() -> String {

        return self.color

    }

}

現(xiàn)在,該類的getColor被調(diào)用了,它對什么self是一個(gè)多態(tài)的想法。


查看完整回答
反對 回復(fù) 2019-11-13
?
瀟湘沐

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

我設(shè)法得到它的工作通過定義color上Color和切換執(zhí)行列表B.沒有太多的好,如果B必須是一個(gè)A雖然。


protocol Color {

    var color : String { get }

}


protocol RedColor: Color {


}


extension Color {

    var color : String {

        get {return "Default color"}

    }

}


extension RedColor {

    var color : String {

        get {return "Red color"}

    }

}


protocol PrintColor {

    func getColor() -> String

}


extension PrintColor where Self: Color {

    func getColor() -> String {

        return color

    }

}


class A : Color, PrintColor {


}


class B : RedColor, PrintColor {


}


let a = A().getColor() // "Default color"

let b = B().getColor() // "Red color"


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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