iOS中关于泛型的解析
文章围绕这五点:
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.
大意是讲:
泛型可以让你使用定义的类型来编写灵活的、可重用的函数和类型,可以避免重复,以清晰,抽象的方式表达其意图。用人话来说(????),泛型给予我们更抽象的封装函数或类的能力,不严谨的来讲,一门语言越抽象使用越方便。Swift中的Array和Dictionary都是基于泛型编写的集合类型,如果不太理解也没关系,下面讲几个例子理解下。
1. Objective-C中的泛型
在2015年WWDC上苹果推出了Swift 2.0版本,为了让开发者从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.
所以我们经常看到的OC中的泛型比如:
1
2
3
4 // 实例化一个元素类型为`NSString`的数组
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中关于泛型的解析下载
相关电子资料下载
- iOS17.1可能明天发布,iOS17.1主要修复哪些问题? 376
- C语言是否支持泛型编程? 63
- 华为全新鸿蒙蓄势待发 仅支持鸿蒙内核和鸿蒙系统应用 719
- 苹果手机系统iOS 17遭用户质疑 731
- iPhone12辐射超标?苹果推送iOS 17.1解决此事 750
- 传华为囤积零部件 目标明年智能手机出货7000万部;消息称 MiOS 仅限国内,小米 28208
- 苹果推送iOS17.0.3,解决iPhone15Pro系列存在机身过热 216
- Testin云测兼容和真机服务平台中上线iPhone 15系列手机 208
- 利尔达推出搭载HooRiiOS的Matter模组 145
- 运放参数解析:输入偏置电流(Ibias)和失调电流(Ios) 128