Swift protocol的動態特性

2021-08-28 04:18:46 字數 734 閱讀 5427

protocolchef 

extension chef

}struct seafoodchef:chef

}let chefone:chef = seafoodchef()

let cheftwo:seafoodchef = seafoodchef()

chefone.makefood()

cheftwo.makefood()

上面**列印出兩行:「cook seafood」。

在swift中,協議中是動態派發,擴充套件中是靜態派發。也就是說,協議中如果有方法宣告,那麼方法會根據物件的實際型別進行呼叫。

此題中的makefood()方法在chef協議中已經宣告了,而chefone雖然宣告為chef,但實際實現為seafoodchef。所以,根據實際情況,makefood()會呼叫seafoodchef中的實現。cheftwo也是同樣的道理。

如果protocol中沒有宣告makefood()方法,**會輸出什麼?

**會列印兩行結果,第一行為"make food" 第二行為"cook seafood"。

因為協議中沒有宣告makefood()方法,所以,此時只會按照擴充套件中的宣告型別進行靜態派發。也就是說,會根據物件的宣告型別進行呼叫。cheone被宣告為chef,所以呼叫擴充套件中的實現,chetwo被宣告為seafoodchef,所以呼叫seafoodchef中的實現。

Ogre Animation(Ogre中的動畫)

在ogre中animation是一塊非常重要的部分,但是筆者在學習ogre的動畫時遺憾的發現關於ogre中動畫的資料非常的少,ogre的sample中只有最簡單的匯入乙個骨骼動畫的例子,在網上也很少有人談及,ogre wiki中的教程也是邊邊角角,不知這麼重要的部分為什麼不做乙個全面的tutoria...

多級的連動

特點 通用性強 實現了script和html分離 一 檔案及原始碼 cs.js 用函式和類兩種方法實現,呼叫時只要呼叫一種就可以了。if isonchange null cascadeselect.onchange function cascadeselect.getattr function at...

Ogre Animation(Ogre中的動畫)

ogre的動畫框架 這其中最底層的類叫做keyframe類,它表示某乙個可驅動物的 乙個結點 一根骨頭 乙個頂點。的某乙個關鍵幀的狀態 位置 縮放 朝向等 和對應的時間點,這樣乙個可驅動點可以有多個關鍵幀keyframe。乙個可驅動點的所有keyframe組合成乙個track,每個可驅動點都有乙個他...