我有類似這樣的代碼。當返回的值是類型轉換的父類時,類型方法的返回值?
MySubclassOfUIView *view = [aUIPickerView viewForRow:4 forComponent:0];
的viewForRow:forComponent UIPickerView的方法返回一個UIView。 MySubclassOfUIView就是這樣:UIView的一個子類。
UIPickerView委託(此處未提及)使用一組MySubclassOfUIView對象來填充UIPickerView組件的行。因此,我知道viewForRow:forComponent方法將真正返回指向MySubclassOfUIView類型的對象的指針。
Xcode給了我這個警告。
不兼容的指針類型用'UIView *'類型的表達式初始化'MySubclassOfUIView *'。
因此,我想我會註冊它來修復警告,它給了我這個代碼。
MySubclassOfUIView *view = (MySubclassOfUIView*)[aUIPickerView viewForRow:4 forComponent:0];
並且警告消失。
請原諒我不穩定的C和Objective-C技能,但是我做了正確的事情(至今給出的上下文)?有其他更好的方法來處理這種情況嗎?
這被稱爲[可替代性](http://en.wikipedia.org/wiki/Liskov_substitution_principle)。 – 2011-05-01 21:29:55