項(xiàng)目中創(chuàng)建了一個(gè)GlogConfig類,想在這個(gè)類里聲明一個(gè)全局量,可以在項(xiàng)目其他地方調(diào)用.
GlogConfig.h
#import <Foundation/Foundation.h>
//聲明一個(gè)全局變量,注意這個(gè)是一個(gè)不可變得全局變量
extern NSInteger const pram;
extern const int DEFAULT_PORT;
#define openPram 0x13
@interface GlogConfig : NSObject
@end
GlogConfig.m
#import "GlogConfig.h"
//初始化定義,一個(gè)不可變的常量
const NSInteger pram = 0x11;
const int DEFAULT_PORT = 80;
@implementation GlogConfig
//在這個(gè)類的內(nèi)部我添加一個(gè)方法,switch-case處理一些東西
//其中一個(gè)case的匹配條件就是pram
- (void)handle:(int)value {
switch (value) {
case pram:
NSLog(@"獲取到pram常量");
break;
case openPram:
NSLog(@"當(dāng)前值跟openPram相等");
case 2:
NSLog(@"當(dāng)前值跟pram不相等");
break;
default:
NSLog(@"當(dāng)前值跟pram不相等");
break;
}
}
@end
然后我在ViewController.h中引入了GlogConfig.h(#import "GlogConfig.h"
)
在ViewController的viewDidLoad中,也增加了一個(gè)switch-case的判斷
ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
NSInteger a = 0x11;
switch (a) {
// case pram:
// NSLog(@"當(dāng)前值跟pram相等");
// break;
case openPram:
NSLog(@"當(dāng)前值跟openPram相等");
case 2:
NSLog(@"當(dāng)前值跟pram不相等");
break;
default:
NSLog(@"當(dāng)前值跟pram不相等");
break;
}
}
如果打開注釋的那一塊代碼會(huì)報(bào)一個(gè)錯(cuò)誤提醒Expression is not an integer constant expression
GlogConfig.h中聲明的pram(extern NSInteger const pram;
)對(duì)外是一個(gè)全局不可變的一個(gè)變量.
我們?cè)贕logConfig.m中對(duì)pram進(jìn)行了初始值進(jìn)行定義(const NSInteger pram = 0x11;
),這里parm是一個(gè)局部常量不可變的.
然而為什么在GlogConfig.m中可以在switch-case中使用pram,而在ViewController中的switch-case不能使用pram.
這里我們需要看一下在使用swift-case是的注意事項(xiàng)
(1)switch后面的值必須是整型數(shù)據(jù)或者可以轉(zhuǎn)換成整型的數(shù)據(jù)
(2)case后面可以是常量也可以是常量表達(dá)式,但必須是整型數(shù)據(jù)。
(3)case后的第一句話不能定義變量,如果非要定義變量,需要加{}。
在回到我們的項(xiàng)目中,可以看到雖然我們?cè)贕logConfig.h中對(duì)外聲明了一個(gè)不可變的全局變量pram,然后在GlogConfig.m中對(duì)pram進(jìn)行定義(一個(gè)常量但是它是一個(gè)局部的不可變得常量).
在GlogConfig.m的switch-case中pram是一個(gè)常量,又是一個(gè)整型,所以就不會(huì)報(bào)錯(cuò).
在ViewController.m的switch-case中pram其實(shí)是GlogConfig.h對(duì)外聲明的一個(gè)不可變的全局變量.從第二條注意事項(xiàng),我們可以看出case要么是一個(gè)常量或者常量表達(dá)式,而且必須為整形數(shù)據(jù).這里使用parm是錯(cuò)誤的.
但是使用openPram(#define openPram 0x11
)在switch-case中是不會(huì)有任何問題的,define修飾的就是一個(gè)常量,在GlogConfig.m的switch-case和ViewController.m的switch-case是都可以用的.