iOS中關(guān)于泛型的解析
文章圍繞這五點:
1. 泛型是什么
2. 為什么要用泛型
3. 泛型怎么用
4. 泛型進階
5. 泛型的延伸使用
泛型(Generics)是什么?
引用Apple中Generics的描述:
Generic code enables you to write flexible, reusable functions and types that can work with any type, subject to requirements that you define. You can write code that avoids duplication and expresses its intent in a clear, abstracted manner.
Generics are one of the most powerful features of Swift, and much of the Swift standard library is built with generic code. In fact, you’ve been using generics throughout the Language Guide, even if you didn’t realize it. For example, Swift’s Array and Dictionary types are both generic collections. You can create an array that holds Int values, or an array that holds String values, or indeed an array for any other type that can be created in Swift. Similarly, you can create a dictionary to store values of any specified type, and there are no limitations on what that type can be.
大意是講:
泛型可以讓你使用定義的類型來編寫靈活的、可重用的函數(shù)和類型,可以避免重復(fù),以清晰,抽象的方式表達其意圖。用人話來說(????),泛型給予我們更抽象的封裝函數(shù)或類的能力,不嚴(yán)謹(jǐn)?shù)膩碇v,一門語言越抽象使用越方便。Swift中的Array和Dictionary都是基于泛型編寫的集合類型,如果不太理解也沒關(guān)系,下面講幾個例子理解下。
1. Objective-C中的泛型
在2015年WWDC上蘋果推出了Swift 2.0版本,為了讓開發(fā)者從Objective-C更好得過渡到Swift上,蘋果也為Objective-C帶來了Generics泛型支持
Generics. Allow you to specify type information for collection classes like NSArray, NSSet, and NSDictionary. The type information improves Swift access when you bridge from Objective-C and simplifies the code you have to write.
所以我們經(jīng)常看到的OC中的泛型比如:
1
2
3
4 // 實例化一個元素類型為`NSString`的數(shù)組
NSArray 《nsstring *》 *array = [NSArray new ];
// 或者字典
NSDictionary 《nsstring *, nsnumber *》 *dict = @{@ “manoboo” : @1}《/nsstring *, nsnumber *》《/nsstring *》
或者:
1
2 - (void)touchesBegan:(NSSet《uitouch *》 *)touches withEvent:(UIEvent *)event {
}《/uitouch *》
我們先看看OC中的泛型大概做了些什么:
打開NSArray.h 我們可以看到:
1
2
3
4
5
6
7 @interface NSArray《__covariant ObjectType》 : NSObject 《nscopying, nsmutablecopying, nssecurecoding, nsfastenumeration》
@property (readonly) NSUInteger count;
- (ObjectType)objectAtIndex:(NSUInteger)index;
- (instancetype)init NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithObjects:(const ObjectType _Nonnull [_Nullable])objects count:(NSUInteger)cnt NS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
@end《/nscopying, nsmutablecopying, nssecurecoding, nsfastenumeration》
聲明一個Generics的格式如下:
1
2 @interface 類名 《占位類型名稱》
@end
占位類型后也可以加入類型限制,比如:
1
2 @interface MBCollection 《t: nsstring *》
@end《/t: nsstring *》
非常好我支持^.^
(0) 0%
不好我反對
(1) 100%
下載地址
iOS中關(guān)于泛型的解析下載
相關(guān)電子資料下載
- iOS17.1可能明天發(fā)布,iOS17.1主要修復(fù)哪些問題? 376
- C語言是否支持泛型編程? 63
- 華為全新鴻蒙蓄勢待發(fā) 僅支持鴻蒙內(nèi)核和鴻蒙系統(tǒng)應(yīng)用 719
- 蘋果手機系統(tǒng)iOS 17遭用戶質(zhì)疑 731
- iPhone12輻射超標(biāo)?蘋果推送iOS 17.1解決此事 750
- 傳華為囤積零部件 目標(biāo)明年智能手機出貨7000萬部;消息稱 MiOS 僅限國內(nèi),小米 28208
- 蘋果推送iOS17.0.3,解決iPhone15Pro系列存在機身過熱 216
- Testin云測兼容和真機服務(wù)平臺中上線iPhone 15系列手機 208
- 利爾達推出搭載HooRiiOS的Matter模組 145
- 運放參數(shù)解析:輸入偏置電流(Ibias)和失調(diào)電流(Ios) 128