看板 MacDev 關於我們 聯絡資訊
※ 引述《s8911124 (-.-)》之銘言: : 大家好,有個問題想請教一下,假設我有一個function如下 : - (void)copyObject:(id<ChangeProtocol>)object : { : Class trueClass = [object class]; : trueClass *newObject = [trueClass alloc]init]; //Error : } : 有沒有辦法只知道protocol的物件當輸入,做出一個和此物件類別一樣的新物件? 接近了 - (void)copyObject:(id<ChangeProtocol>)object { Class trueClass = [object class]; id newObject = [[trueClass alloc] init]; // Or id<ChangeProtocol> newObject = [[trueClass alloc] init]; } 你不能把 trueClass 當成 newObject 的 type name 因為 trueClass 是「存有該 class 物件的變數」 而不是「那個 class」本身 Objective-C 是 C 的 superset, 所以在這裡必須遵從 C 的 syntax 在 C 裡 type name 必須是靜態的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.94.61
s8911124:謝謝指教!我懂了。 12/04 19:44
howdiun:好文推 12/05 09:55
tom19830924:看不懂推 12/06 09:46