隨著Swift的加入植袍,OC在不也在不斷向著新的編程方式靠攏拯欧,雖然OC是我很喜歡的一門很優(yōu)雅的語言碉熄,但是畢竟編程講究的是效率桨武,時(shí)代的大浪下,OC的很多寫法也順應(yīng)大潮做出了一些相應(yīng)的改變锈津。
下面我們來看一下都有哪些地方現(xiàn)代化OC語法做出的改變呀酸。
1. 將一些單純的方法轉(zhuǎn)換為屬性
- (BOOL)isGrade;
@property (NS_NONATOMIC_IOSONLY, getter=isGrade, readonly) BOOL grade;
2. 將一些中括號調(diào)用變?yōu)閷傩哉{(diào)用
2.1. get方法調(diào)用的修改
[[NSBundle mainBundle] infoDictionary]
[NSBundle mainBundle].infoDictionary
[[UIScreen mainScreen] bounds]
[UIScreen mainScreen].bounds
[[[UIApplication sharedApplication] delegate] window]
[UIApplication sharedApplication].delegate.window
類似的還有length
、count
等等
2.2. set方法調(diào)用的修改
將setImage
這種類似的setter
方法轉(zhuǎn)換為.語法的setter
賦值
image = [[UIImageView alloc] init];
[image setImage:[UIImage imageNamed:@"name.png"]];
image.image = [UIImage imageNamed:@"name.png"];
[btn setBackgroundColor:[UIColor redColor]];
btn.backgroundColor = [UIColor redColor];
3.將初始化 init 方法的返回值從 id 轉(zhuǎn)換為轉(zhuǎn)換為 instancetype
4.枚舉宏定義的改變
將enum
修改為NS_ENUM
將枚舉的后置修改為前置
Old Version
typedef enum {
EnumType,
EnumTypeA,
EnumTypeB
} Type;
Modern Version:
typedef NS_ENUM (NSUInteger Type) {
EnumType,
EnumTypeA,
EnumTypeB
};
6.字典和數(shù)組的一些賦值和取值的方式
6.1 字典
[dict setObject:value forKey:key];
dict[key] = value;
id value = [dict objectForKey: key]
id value = dict[key]
6.2 數(shù)組
[array objectAtIndex:index]
array[index]
7. 變量
@implementation Manager {
UIButton *loginButton;
}
@interface HHMyClass ()
@property (nonatomic) UIButton *loginButton;
@end
@implementation HHMyClass
...
@end
8. 數(shù)組和字典的初始化
NSNumber *number = [NSNumber numberWithInteger:7];
NSNumber *modernNumber = @(7); // or @7
NSArray *array = [NSArray arrayWithObjects:number, modernNumber, nil];
NSArray *modernArray = @[number, modernNumber];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:number, @"number"];
NSDictionary *modernDictionary = @{@"number" : number};