【IOS沉思录】Objective-C中的糖衣语法(字面量)

本文介绍了糖衣语法的概念及其在Objective-C中的应用。糖衣语法是一种提高编程效率和代码可读性的语法特性,如使用字面量创建数组和字典等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

糖衣语法的定义

糖衣语法,又叫‘语法糖’、‘语法盐’等等,是由英国计算机科学家彼得·约翰·兰达(Peter J.Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

糖衣语法在各种语言中都又出现,最常用的就是数组的[ ]操作符的下标访问以及{ }操作符对数组的初始化,例如C语言中可以通过下标访问数组元素,这种类似[ ]和{ }操作符的符合程序员思维的简单表示方法就是所谓的糖衣语法了:

// C中的数组操作
int a[3] = {1,2,3};
int b = a[2];

事实上[ ]和{ }在JSON数据格式中最常见了,[ ]一般封装一个数组,{ }一般封装一个整体对象;

OC中的糖衣语法

糖衣语法在OC中又常叫做‘字面量’,主要用在NSString,NSNumber,NSArray,NSDictionary这些类中,使用字面量可以更清晰的看清数据的结构,而且大大减小了代码编写的复杂繁琐度,代码易读性更高。

OC中字面量的用法主要由以下几种情况,包括基本数据类型NSNumber、静态数组NSArray和字典NSDictionary、可变数组NSMultableArray和字典NSMultableDictionary。其中静态的数组和字典不能直接用[ ]操作符来通过下标访问元素或者通过键值访问元素,而可变长数组和字典可以;另外可变长数组和字典用字面量初始化时要进行multableCopy操作。

糖衣语法用法:

/*** 糖衣语法【注意变量中不可出现nil!】  ***/

    // 1.基本数据对象
    NSNumber *num_int = @1;
    NSNumber *num_float = @1.1f;
    NSNumber *num_bool = @YES;
    NSNumber *num_char = @'a';
    // 类似还有:NSInteger, Double, Long, Short ...
    // 基本数据运算
    int operator_i = 3;
    float operator_f = 2.1f;
    NSNumber *expression = @(operator_i * operator_f);

    // 2.静态数组、字典
    NSArray *array = @[@1, @2, @3];
    NSDictionary *dic = @{
                          @"KEY":@"VALUE",
                          @"KEY1":@"VALUE1"
                          };
    // 访问但不可更新
    NSNumber *num = array[1];
    NSString *string = dic[@"KEY"];

    // 3.可变数组、字典
    NSMutableArray *mulArray = [@[@"a", @"b", @"c"] mutableCopy];
    NSMutableDictionary *mulDic = [@{
                                     @"key": @"value",
                                     @"key1": @"value1"
                                     } mutableCopy];
    // 可变数组元素的下标访问或键值访问以及元素更新
    NSString *mulstring = mulArray[1];
    mulArray[1] = @"d";
    NSString *dicstring = mulDic[@"key"];
    mulDic[@"key"] = @"value3";

原用法:

/*** 对应的原语法【变量中可以出现nil,数组中出现的nil会被过滤掉】 ***/

    // 1.基本数据对象
    NSNumber *num_int = [NSNumber numberWithInt:1];
    NSNumber *num_float = [NSNumber numberWithFloat:1.1f];
    NSNumber *num_bool = [NSNumber numberWithBool:YES];
    NSNumber *num_char = [NSNumber numberWithChar:'a'];
    // 类似还有:NSInteger, Double, Long, Short ...

    // 2.静态数组、字典
    NSArray *array = [[NSArray alloc]initWithObjects:@1, @2, @3, nil];
    NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:
                         @"VALUE", @"KEY",
                         @"VALUE1", @"KEY1", nil];
    // 访问(静态数组元素不可更新)
    NSNumber *num = [array objectAtIndex:1];
    NSString *string = [dic objectForKey:@"KEY"];

    // 3.可变数组、字典
    NSMutableArray *mulArray = [[NSMutableArray alloc]initWithObjects:@"a", @"b", @"c", nil];
    NSMutableDictionary *mulDic = [[NSMutableDictionary alloc]initWithObjectsAndKeys:
                                   @"value", @"key",
                                   @"value1", @"key1", nil];

    // 访问和更新
    NSNumber *mulnum = [mulArray objectAtIndex:1];
    [mulArray setObject:@"d" atIndexedSubscript:1];
    NSString *mulstring = [mulDic objectForKey:@"KEY"];
    [mulDic setObject:@"value2" forKey:@"key"];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_厚厚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值