2012-06-09 35 views
3

在Objective C中不使用指針表示可能類型的最佳方式是什麼? 我不能簡單地使用一個指向一個對象的指針,因爲指向一個對象的指針不是一個對象,我需要它作爲一個對象。在Objective C中不使用指針表示可能類型的最佳方式(指針指針不是對象?)

我知道這樣做的一種方法是爲每個對象擁有一個自定義類,這會導致像MaybeEmployee,MaybeOrderStatus和更多自定義類的類。這會起作用,但它看起來很爛,並不是一個很好的解決方案。

做到這一點的第二種方法,只需一個Maybe類似乎也是錯誤的。類型安全性的缺乏顯然是不好的。

+0

創建界面和'respondsToSelector'調用是不夠的? –

+0

您可以直接使用該對象並獲得該類。請參閱:http://stackoverflow.com/questions/2055940/how-to-get-class-name-of-object-in-objective-c – hotpaw2

+0

@MarekSebera我不明白你的意思是什麼意見,你可以嗎?進入更多細節? –

回答

0

我不確定「可能類型」對您意味着什麼,但是有沒有一個原因爲什麼id是不夠的?

+1

A也許類型是一個參數多態類型,對於某些類型,a是一個沒有值,(不是空值),或者只是一個值。沒有什麼不同於null的關鍵原因是可以創建setToNothing方法,setToNull方法沒有意義。 –

1

lef2有正確的想法。使用NSNull來表示「可能不是」的情況。

處理它的最簡單方法是讓你的方法返回一個id類型的對象,但正如你所說的那樣,這會犧牲類型安全性。

我建議創建一個祖先類MaybeClass,並讓所有的類從中派生出來。然後你可以創建一個特定的子類MaybeNot那真的是一個NSNull。

請注意,您也可以使用標準對象,並在方法調用的結果爲空時返回nil。 Objective C比許多其他語言更清晰地處理零對象指針。將消息發送給無對象是完全有效的。他們只是掉線。

+0

使用'nil'不是一個有用的替代品,但'MaybeClass'聽起來很有希望。 – Gabe

0

我也不確定你的意思是「可能類型」!一個協議可以成爲你想要的一些類實現協議,而其他協議不是。他們可以檢查對象是否實現它[yourObject conformsToProtocol:@protocol(yourProtocol)]。我希望這會有所幫助,但如果不是更多的澄清將是好事。