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

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

是否可以向Swift協(xié)議一致性擴(kuò)展中添加類型約束?

是否可以向Swift協(xié)議一致性擴(kuò)展中添加類型約束?

心有法竹 2019-10-21 09:39:36
我想擴(kuò)展Array以增加對(duì)新協(xié)議的一致性-但僅適用于其元素本身符合特定協(xié)議的數(shù)組。更籠統(tǒng)地說,我想讓帶有類型參數(shù)的類型(無論是協(xié)議類型還是具體類型)僅在類型參數(shù)與某些約束匹配時(shí)才實(shí)現(xiàn)協(xié)議。從Swift 2.0開始,這似乎是不可能的。有什么我想念的方式嗎?例假設(shè)我們有以下Friendly協(xié)議:protocol Friendly {    func sayHi()}我們可以擴(kuò)展現(xiàn)有的類型來實(shí)現(xiàn)它:extension String: Friendly {    func sayHi() {        print("Greetings from \(self)!")    }}"Sally".sayHi()我們還可以擴(kuò)展Array實(shí)現(xiàn)sayHi()所有元素Friendly:extension Array where Element: Friendly {    func sayHi() {        for elem in self {            elem.sayHi()        }    }}["Sally", "Fred"].sayHi()此時(shí),類型[Friendly]本身應(yīng)該實(shí)現(xiàn)Friendly,因?yàn)樗鼭M足協(xié)議的要求。但是,此代碼無法編譯:extension Array: Friendly where Element: Friendly {    func sayHi() {        for elem in self {            elem.sayHi()        }    }}錯(cuò)誤消息是“具有約束的'Array'類型的擴(kuò)展不能具有繼承子句”,這似乎最終確定了直接方法的大門。有間接解決方法嗎?我可以使用一些巧妙的技巧?也許有一種方法涉及擴(kuò)展SequenceType而不是Array?一個(gè)有效的解決方案將使此代碼編譯:let friendly: Friendly = ["Foo", "Bar"]更新:它已落入Swift 4.1中,真是太美了!extension Array: Friendly where Element: Friendly現(xiàn)在,該示例將按照原始問題中的說明進(jìn)行編譯。
查看完整描述

2 回答

?
白豬掌柜的

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

編輯:如更新的問題中所述,自Swift 4.1起,現(xiàn)在可以實(shí)現(xiàn)


目前在Swift中(從Xcode 7.1開始)無法實(shí)現(xiàn)。如錯(cuò)誤所示,您不能將協(xié)議一致性(“繼承子句”)限制為類型受限的擴(kuò)展。也許有一天。我不認(rèn)為沒有任何可能的深層原因,但是目前尚未實(shí)現(xiàn)。


您可以獲得的最接近的結(jié)果是創(chuàng)建一個(gè)包裝器類型,例如:


struct FriendlyArray<Element: Friendly>: Friendly {

    let array: [Element]

    init(_ array: [Element]) {

        self.array = array

    }

    func sayHi() {

        for elem in array {

            elem.sayHi()

        }

    }

}


let friendly: Friendly = FriendlyArray(["Foo", "Bar"])

(您可能想擴(kuò)展FriendlyArray為一個(gè)CollectionType。)


有關(guān)我自己陷入嘗試進(jìn)行這項(xiàng)工作的瘋狂以及我從邊緣爬回的故事,請(qǐng)參閱NSData,我的老朋友。


查看完整回答
反對(duì) 回復(fù) 2019-10-21
  • 2 回答
  • 0 關(guān)注
  • 615 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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