Objective-C 之 Literals(字面量)

來源:互聯網
上載者:User

標籤:

今天整理一下關於Objective-C Literals的內容,Literals翻譯成字面量或者字面值,就是直接被寫到原始碼中的值。這不是一個陌生的概念,我們在寫程式的時候能頻繁的見到。我們很早就見過NSString 字面量了: 

     
NSString *greeting = @"Hello World";

它的文法很簡單,上面的代碼就是通過在C字串的前面加上@符號建立了一個NSString對象greeting,整段代碼看起來簡潔易懂,如果沒有直接量文法,那麼建立這個greeting可能就要使用下面的方法了: 

1 NSString *greeting = [NSString stringWithUTF8String:"Hello World"];

    在Xcode4.4和LLVM4.0之後,一些新特性被提出來,其中一個就是對NSNumber、NSArray和NSDictionary使用字面量文法。

    NSNumber

    在新特性提出來之前,我們要建立的一個NSNumber對象可能是這樣的: 

1 NSNumber  *aNumber = [NSNumber  numberWithInt:22];

    那麼現在就可以這樣寫: 

1 NSNumber  *aNumber = @22;

    當然這裡不僅對於 -numberWithInt:適用,對於其他的也同樣適用: 

 1 //不用字面量的方式: 2 NSNumber *aBool = [NSNumber numberWithBool:YES]; 3 NSNumber *aChar = [NSNumber numberWithChar:‘a‘]; 4 NSNumber *aUnsigned = [NSNumber numberWithUnsignedInt:22U]; 5 NSNumber *aLong = [NSNumber numberWithLong:27L]; 6 NSNumber *aFloat = [NSNumber numberWithFloat:3.14F]; 7 NSNumber *aDouble = [NSNumber numberWithDouble:3.14]; 8   9 //字面量的寫法10 NSNumber *aBool = @YES;11 NSNumber *aChar = @‘a‘;12 NSNumber *aUnsigned = @22U;13 NSNumber *aLong = @27L14 NSNumber *aFloat = @3.14F;15 NSNumber *aDouble = @3.14;

     除此之外,你還可以用運算式: 

1 NSNumber *result = @(2+3*4);

    NSArray

    不使用字面量文法的時候,建立一個數組通常是這樣的: 

1 NSArray *aArray = [NSArray arrayWithObjects: [NSNumber numberWithInt:22], @"kuntzuo", @"hello", nil];

    而有了字面量文法之後,就可以這樣寫: 

1 NSArray *aArray = @[@22, @"kuntzuo", @"hello"];

    建立數組的字面量的方式變得更加簡潔了,在方括弧前面加上字面量@符號 ,裡面寫上內容,而且不再需要nil作為結束標誌了,如果沒有去掉nil會得一個警告,運行時會報錯。

     NSDictionary

     建立一個NSDictionary的傳統方式是這樣: 

 1 NSArray *keys   = [NSArray arrayWithObjects:@"Name", @"Sex", @"Age", nil]; 2   3 NSArray *objects = [NSArray arrayWithObjects:@"kuntzuo", @"男", [NSNumber numberWithInt:22], nil]; 4   5 NSDictionary *myProfile = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 6   7 //或者是 8   9 NSDictionary *myProfile = [NSDictionary dictionaryWithObjectsAndKeys:10  11                            @"kuntzuo ", @"Name",12  13                            @"男 ", @"Sex",14  15                            [NSNumber numberWithInt:22], @"Age",16  17                            nil];

     以上兩種方法看起來都不簡單,而且容易混亂。字面量文法給我們更好的可選項,看看下面寫法: 

1 NSDictionary *myProfile = @{"Name":"kuntzuo","Sex":"男","Age":@22};

     除了用字面量來建立NSArray、NSNumber、NSDictionary之外。如果集合是可變類型如 

NSMutableArray、NSMutableDictionary,新特性還允許你用下標的方式來訪問和修改集合中的值。下面的代碼簡單示範了這一特性。 

 1 //對於上面的NSArray *aArray 2 NSArray *aArray = @[@22, @"kuntzuo", @"hello"]; 3 NSMutableArray *mutableArray = [@[@22, @"kuntzuo", @"hello"] mutableCopy]; 4   5 //傳統訪問方式 6 NSString *greeting = [mutableArray objectAtIndex:2]; //"hello" 7 //新方法訪問 8 NSString *greeting = mutableArray[2]; // "hello" 9 //新方法修改10 mutableArray[2] = @"hello world";11  12  13 //對於上面的NSDictionary14 NSDictionary *myProfile = @{"Name":"kuntzuo","Sex":"男","Age":@22}15 NSMutableDictionary *mutableDic = [myProfile mutableCopy];16 //傳統訪問方式17 NSString *name = [mutableDic objectForKey:@"Name"]; // "kuntzuo"18 //新方法訪問19 NSString *myName = mutableDic[@"Name"];//"kuntzuo"20 //新方法修改21 mutableDic[@"Name"] = @"kuntian zuo";

    這就是我所瞭解的Literals的全部內容,雖然現在也不算新東西了,不過我們掌握它還是很有必要的,既方便我們寫代碼,也可以是代碼的可讀性更高,風格更好。

Objective-C 之 Literals(字面量)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.