亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

Objective-C編程中語句和變量的一些編寫規范建議

2020-07-26 03:23:28
字體:
來源:轉載
供稿:網友

語句
條件語句

條件語句體應該總被大括號包圍。只有一行代碼最好也加上,否則會帶來安全隱患。

復制代碼 代碼如下:

// 推薦
if (!error) {
    return success;
}

// 不推薦
if (!error)
    return success;

if (!error) return success;


尤達表達式(Yoda)

不要使用尤達表達式。(名字起源于星球大戰中尤達大師的講話方式,總是用倒裝的語序)

復制代碼 代碼如下:

// 推薦
if ([myValue isEqual:@42]) { ...

// 不推薦
if ([@42 isEqual:myValue]) { ...


nil和BOOL的檢查

一些人喜歡用這樣的方式來檢查nil:

復制代碼 代碼如下:

if (nil == myValue) { ...

這樣做可以避開少些一個"=“的錯誤,因為一旦少寫一個”=“,那么nil是不能被賦值的,編譯器會報錯。

但是前面提到,最好不要使用尤達表達式。所以更好的解決方法是用”!”來完成nil和BOOL的檢查。

復制代碼 代碼如下:

// 推薦
if (someObject) { ...
if (![someObject boolValue]) { ...
if (!someObject) { ...

// 不推薦
if (someObject == YES) { ... // Wrong
if (myRawValue == YES) { ... // Never do this.
if ([someObject boolValue] == NO) { ...


不要嵌套多個if語句

不要嵌套多個if語句,而是使用多個return來避免增加復雜度,并提高代碼可讀性。

也就是說,在一個方法中,重要的部分盡量不要放在if語句中,而是將”其它情況”放在if中。

復制代碼 代碼如下:

// 推薦
- (void)someMethod {
  if (![someOther boolValue]) {
      return;
  }

  //Do something important
}

// 不推薦
- (void)someMethod {
  if ([someOther boolValue]) {
    //Do something important
  }
}


復雜的表達式

當一個判斷條件很復雜時,應該將它們提取出來賦值給一個BOOL變量。

復制代碼 代碼如下:

BOOL nameContainsSwift  = [sessionName containsString:@"Swift"];
BOOL isCurrentYear      = [sessionDateCompontents year] == 2014;
BOOL isSwiftSession     = nameContainsSwift && isCurrentYear;

if (isSwiftSession) {
    // Do something very cool
}


三元運算符

三元運算符要保證可讀性。

復制代碼 代碼如下:

// 推薦
result = a > b ? x : y;

// 不推薦
result = a > b ? x = c > d ? c : d : y;


當三元運算符的第二個參數(if 分支)返回和條件語句中已經檢查的對象一樣的對象的時候,下面的表達方式更靈巧:
復制代碼 代碼如下:

// 推薦
result = object ? : [self createObject];

// 不推薦
result = object ? object : [self createObject];


錯誤處理

有些方法通通過參數返回 error 的引用,使用這樣的方法時應當檢查方法的返回值,而非 error 的引用。

復制代碼 代碼如下:

// 推薦
NSError *error = nil;
if (![self trySomethingWithError:&error]) {
    // Handle Error
}

switch語句中的case,如果只有一行代碼可以不必加上大括號,但是多行需要加上。
復制代碼 代碼如下:

switch (condition) {
    case 1:
        // ...
        break;
    case 2: {
        // ...
        // Multi-line example using braces
        break;
       }
    case 3:
        // ...
        break;
    default:
        // ...
        break;
}

枚舉類型

使用NS_ENUM()這個宏來定義枚舉,它有更強大的的類型檢查和代碼補全。

復制代碼 代碼如下:

typedef NS_ENUM(NSUInteger, ZOCMachineState) {
    ZOCMachineStateNone,
    ZOCMachineStateIdle,
    ZOCMachineStateRunning,
    ZOCMachineStatePaused
};

變量
盡量使用長的、描述性的方法和變量名。

復制代碼 代碼如下:

// 推薦
UIButton *settingsButton;

// 不推薦
UIButton *setBut;


常量應該以駝峰法命名,并以相關類名作為前綴。
復制代碼 代碼如下:

// 推薦
static const NSTimeInterval ZOCSignInViewControllerFadeOutAnimationDuration = 0.4;

// 不推薦
static const NSTimeInterval fadeOutTime = 0.4;


推薦使用常量來代替字符串字面值和數字。可以方便復用,快速修改。

常量應該用static聲明為靜態常量,而不要用#define,除非它明確作為宏來使用。

復制代碼 代碼如下:

// 推薦
static NSString * const ZOCCacheControllerDidClearCacheNotification = @"ZOCCacheControllerDidClearCacheNotification";

static const CGFloat ZOCImageThumbnailHeight = 50.0f;

// 不推薦
#define CompanyName @"Apple Inc."
#define magicNumber 42


常量如果需要暴露給外部,那么要在頭文件中以這樣的形式:
復制代碼 代碼如下:

extern NSString *const ZOCCacheControllerDidClearCacheNotification;

并在實現文件中為它賦值。

只有公有的常量才需要添加命名空間作為前綴。盡管實現文件中私有常量的命名可以遵循另外一種模式,你仍舊可以遵循這個規則。

方法名與方法類型(-/+符號)間應加上一個空格。

方法段間也應該以空格間隔。

參數前應該有一個描述性的關鍵詞。

盡可能少用”and”這個詞,它不應該用來闡明有多個參數。

復制代碼 代碼如下:

// 推薦
- (void)setExampleText:(NSString *)text image:(UIImage *)image;
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;
- (id)viewWithTag:(NSInteger)tag;
- (instancetype)initWithWidth:(CGFloat)width height:(CGFloat)height;

// 不推薦
- (void)setT:(NSString *)text i:(UIImage *)image;
- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;
- (id)taggedView:(NSInteger)tag;
- (instancetype)initWithWidth:(CGFloat)width andHeight:(CGFloat)height;
- (instancetype)initWith:(int)width and:(int)height;  // Never do this.


使用字面值來創建不可變的NSString,NSDictionary,NSArray和NSNumber對象。

用這種方式,注意不要將nil放在NSArray和NSDictionary里,這樣會導致崩潰。

復制代碼 代碼如下:

NSArray *names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"];
NSDictionary *productManagers = @{@"iPhone" : @"Kate", @"iPad" : @"Kamal", @"Mobile Web" : @"Bill"};
NSNumber *shouldUseLiterals = @YES;
NSNumber *buildingZIPCode = @10018;

不要這樣:
復制代碼 代碼如下:

NSArray *names = [NSArray arrayWithObjects:@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul", nil];
NSDictionary *productManagers = [NSDictionary dictionaryWithObjectsAndKeys: @"Kate", @"iPhone", @"Kamal", @"iPad", @"Bill", @"Mobile Web", nil];
NSNumber *shouldUseLiterals = [NSNumber numberWithBool:YES];
NSNumber *buildingZIPCode = [NSNumber numberWithInteger:10018];

避免這樣的方式創建可變數組:
復制代碼 代碼如下:

NSMutableArray *aMutableArray = [@[] mutableCopy];

這樣的方式,在效率和可讀性上都存在問題。

效率:一個不必要的不可變數組被創建后馬上被廢棄,并沒有必要。

可讀性:可讀性并不好。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美日韩91| 久久久久中文字幕| 亚洲午夜女主播在线直播| 91精品视频在线播放| 日韩在线观看精品| 日韩中文字幕视频| 欧美成人精品影院| 97视频在线观看视频免费视频| 成人观看高清在线观看免费| 成人精品视频久久久久| 亚洲成人网久久久| 久久久精品视频在线观看| 亚洲精品网站在线播放gif| 日本午夜人人精品| 欧洲美女免费图片一区| 日韩av网站电影| 性欧美xxxx交| 亚洲小视频在线| 97视频在线观看免费| 亚洲精品视频二区| 欧美肥臀大乳一区二区免费视频| 中文字幕一区日韩电影| 亚洲国产中文字幕在线观看| 色综合伊人色综合网| 97久久精品人人澡人人爽缅北| 国产精品成人品| 久久躁狠狠躁夜夜爽| 久久艳片www.17c.com| 亚洲在线第一页| 55夜色66夜色国产精品视频| 日本久久久久久久| 欧美一区二区色| 人人澡人人澡人人看欧美| 中文字幕日韩在线视频| 最好看的2019年中文视频| 自拍偷拍亚洲一区| 不卡av电影在线观看| 欧美精品手机在线| 日韩av电影在线免费播放| 在线视频免费一区二区| 日韩影视在线观看| 中文字幕在线成人| 日韩欧美在线第一页| 日韩高清av在线| 欧美制服第一页| 伊人av综合网| 国产精品亚洲欧美导航| 国内精品久久久| 夜夜嗨av色综合久久久综合网| 日韩亚洲成人av在线| 成人精品一区二区三区电影免费| 日韩欧美成人精品| 亚洲男人天堂九九视频| 成人午夜在线视频一区| 亚洲成人在线网| 国产精品羞羞答答| 亚洲一区二区三| 欧美激情一区二区三级高清视频| 不卡中文字幕av| 国产综合久久久久久| 亚洲欧美在线免费观看| 亚洲精品成人av| 亚洲最大av在线| 欧美日韩人人澡狠狠躁视频| 亚洲国产一区二区三区四区| 色综合天天狠天天透天天伊人| 在线观看精品国产视频| 亚洲精品福利免费在线观看| 日韩电影中文字幕av| 欧美猛交ⅹxxx乱大交视频| 色综合久久精品亚洲国产| 亚洲欧美日韩爽爽影院| 777国产偷窥盗摄精品视频| 国产精品视频一区二区高潮| 韩国视频理论视频久久| 欧美大尺度激情区在线播放| 欧美wwwxxxx| 国产999在线观看| 亚洲午夜国产成人av电影男同| 精品国偷自产在线| 精品久久久久久亚洲国产300| 日韩精品在线免费播放| 日韩中文字幕网址| 欧美精品国产精品日韩精品| 清纯唯美日韩制服另类| 欧美黑人视频一区| 国产一区二区欧美日韩| 国产精品一区二区久久久久| 91在线直播亚洲| 久久国产视频网站| 亚洲性av网站| 欧美视频一区二区三区…| 日韩一区二区精品视频| 久久精品国产亚洲精品2020| 91麻豆国产精品| 欧美色道久久88综合亚洲精品| 国产精品久久久久免费a∨大胸| 欧美一级电影免费在线观看| 久久中国妇女中文字幕| 久久综合伊人77777尤物| 久久精品国产2020观看福利| 懂色av一区二区三区| 久久频这里精品99香蕉| 午夜精品久久久久久99热| 亚洲在线一区二区| 欧美综合第一页| 国产精品一区二区三区免费视频| 久久精品国产久精国产思思| 亚洲自拍av在线| 不卡av在线播放| 久久人人爽人人爽人人片av高清| 亚洲成**性毛茸茸| 青青草成人在线| 日韩一区二区av| 热99精品只有里视频精品| 精品久久久久久久久久国产| 精品福利视频导航| 色综合天天综合网国产成人网| 久久激情视频免费观看| 精品国产自在精品国产浪潮| 成人性教育视频在线观看| 中文字幕在线观看亚洲| 91久久夜色精品国产网站| 色与欲影视天天看综合网| 国产亚洲欧洲高清| 国内精品国产三级国产在线专| 亚洲视频一区二区三区| 亚洲第一视频在线观看| 国产日韩在线看| 欧美亚洲视频一区二区| 人体精品一二三区| 日韩欧美福利视频| 97久久精品人搡人人玩| 色中色综合影院手机版在线观看| 欧美性xxxx极品hd满灌| 久久艹在线视频| 亚洲成色777777女色窝| 伊人男人综合视频网| 色yeye香蕉凹凸一区二区av| 久久久亚洲网站| 两个人的视频www国产精品| 国产精品91久久| 日韩成人av在线| 亚洲片av在线| 日韩精品免费在线视频| 国产成人免费av| 日韩在线视频网站| 伊人久久男人天堂| 国产成人亚洲精品| 亚洲少妇激情视频| 亚洲国产免费av| www高清在线视频日韩欧美| 一区二区三区www| 欧美精品情趣视频| 91精品国产91久久久久久最新| 亚洲无亚洲人成网站77777| 91久久精品国产91久久性色| 久久亚洲欧美日韩精品专区| 成人乱色短篇合集| 黑人巨大精品欧美一区二区一视频| 亚洲综合日韩中文字幕v在线| 欧美黑人极品猛少妇色xxxxx| 亚洲激情 国产| 亚洲精品720p|