iOS 開發(fā)中的泛型

在iOS開發(fā)中,泛型的使用,可以減少溝通的成本,明確類型。
相信大家在開發(fā)中,或多或少,都接觸或使用過泛型。比如在定義一些裝有特定類型的數(shù)組時,會這樣寫

NSMutableArray <CarModel *> *dataSource

這樣就表明了,dataSource這個數(shù)組中,放的是CarModel。使用objectForKey 可以直接用點語法,點出模型內(nèi)部的屬性進(jìn)行使用。

[self.dataSource objectAtIndex:0].property;

在給數(shù)組添加數(shù)據(jù)時,也會有提示指明數(shù)組中的類型。

[self.dataSource addObject:(nonnull CarModel *)];

如果添加了錯誤的類型,會有警告。

[self.dataSource addObject:@""];
Incompatible pointer types sending 'NSString *' to parameter of type 'CarModel * _Nonnull'

自定義泛型類

在聲明類的時候,不確定某些屬性或者方法類型,在使用這個類的時候才確定,就可以采用泛型。
在聲明類的時候,在類的后面<泛型名稱>

 @interface Person<__covariant ObjectType> : NSObject

 @property (nonatomic, strong) ObjectType language;

Language : NSObject
#import <Foundation/Foundation.h>

@interface Language : NSObject

@end

.Java : Language
#import "Language.h"

@interface Java : Language

@end

.iOS : Language
#import "Language.h"

@interface iOS : Language

@end
- (void)test
{
    Java *java = [[Javaalloc]init];

    iOS *ios = [[iOSalloc]init];

  
    // iOS  指定這個人會的是iOS

    Person<iOS *> *p = [[Personalloc]init];

    p.language = ios;

 
    // Java   指定這個人會的是Java

    Person<Java *> *p1 = [[Personalloc]init];

    p1.language = java;

}

__covariant:協(xié)變, 子類轉(zhuǎn)父類
__contravariant:逆變 父類轉(zhuǎn)子類

規(guī)范是死的,人是活的。 不能說我們定義了規(guī)范,就必須使用泛型。
如果需求是:數(shù)組內(nèi),分別有不同類型的對象,你還在糾結(jié)怎么用泛型。。。
總之,要具備這樣的思想,而不是很刻板的去遵守。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容