剛開始很疑惑旨枯,為啥枚舉要整個關(guān)聯(lián)值出來趟佃,用處在什么地方耸袜?
經(jīng)過的學習和思考后有了一點自己理解友多。
首先,來看一個OC寫的枚舉的例子堤框。
app跳轉(zhuǎn)一個網(wǎng)頁有兩種情況:
- 直接跳轉(zhuǎn)的形式
- 拼接token后域滥,再跳轉(zhuǎn)
先來定義個枚舉
typedef NS_ENUM(NSInteger ,PowerType) {
Power_Type_0 = 0,//不對url做任何處理纵柿,直接加載
Power_Type_1 = 1,//拼接token,再跳轉(zhuǎn)url
};
@interface WebViewController : UIViewController
- (instancetype)initWithPowerType:(PowerType)powerType URL:(NSString *)url token:(NSString*)token;
@end
@interface CEGWebViewController ()
@property (copy ,nonatomic) NSString *urlStr;
@property (assign ,nonatomic) PowerType powerType;
@property (copy ,nonatomic) NSString *token;
@end
@implementation WebViewController
- (instancetype)initWithPowerType:(PowerType)powerType URL:(NSString *)url token:(NSString*)token {
if (self = [super init]) {
self.powerType = powerType;
self.urlStr = url;
self.token = token;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
switch (self.powerType) {
case Power_Type_0:
//直接用url請求網(wǎng)頁
break;
case Power_Type_1:
//用url拼接token后再加載網(wǎng)頁
break;
default:
break;
}
}
@end
下面用swift的枚舉關(guān)聯(lián)值重寫上面的場景
enum PowerType {
case directload(String)
case joinToken(String, String)
}
class WebViewController: UIViewController {
let powerType: PowerType!
init(powerType: PowerType) {
self.powerType = powerType
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
switch self.powerType {
case .directload(let url):
//直接用url請求網(wǎng)頁
break
case .joinToken(let url, let token):
//用url拼接token后再加載網(wǎng)頁
break
case .none: break
}
}
}
個人理解關(guān)聯(lián)值启绰,即跟此枚舉類型相關(guān)的參數(shù)昂儒,都可以綁定到枚舉類型上,方便操作委可,不用在類一堆的屬性上來進行操作荆忍,結(jié)構(gòu)清晰!