我之前写过一篇博客《iOS项目中全局变量的定义与使用》,讲的是怎么在iOS项目中定义全局变量。而全局变量和常量是项目中最常用到的两种类型的变量。对于有代码洁癖的程序猿来说,一般是不允许在编码中直接出现数字、字符串的。这篇博客我们来谈谈在iOS中声明常量。并从最一般的声明方法,最后推到最佳实践。
【实践1】:直接在类中声明const常量
- (void)viewDidLoad { [super viewDidLoad]; NSString* const initString = @"myName"; NSLog(@"%@",initString); }
问题:在viewDidLoad()方法中声明了一个常量,那就只能在这个方法中使用这个常量了。。。是不是很悲剧。
【实践2】:在某个类中声明一个全局的const常量
#import "ViewController.h" NSString* const initString = @"myName"; @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@",initString); } @end
在一个类的实现文件中定义一个const常量,那么这个常量就可以在这个类中都可以用。不再局限于一个方法了。
【实践3】类中使用#define定义常量
#import "ViewController.h" # define ALL_NAME @"chenyufeng" # define ALL_AGE 23 @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@",ALL_NAME); NSLog(@"%d",ALL_AGE); } @end
【最佳实践】新建类存放所有的常量
(1)新建Constant类,在Constant.h中实现如下:
#import <Foundation/Foundation.h> extern NSString* const url; #define URL @"http://www.baidu.com" @interface Constant : NSObject @end
#import "Constant.h" NSString* const url = @"http://www.google.com"; @implementation Constant @end
#import "ViewController.h" #import "Constant.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@",url); NSLog(@"%@",URL); } @end
这个我觉得是声明一个常量的最佳实现,也可以符合实际项目的需要。注意的是:在需要使用到定义的常量时,需要导入常量类的头文件。
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!