Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性

转载:http://www.cocoachina.com/applenews/devnews/2012/1023/4957.html

下面的语法需要下载Xcode 4.4。

1、枚举类型的改变
老写法:
[cpp] view plaincopy
    typedef enum Week{  
        Moday,  
        Tuesday,  
        Wednesday,  
        Thursday,  
        Friday,  
        Saturday,  
        Sunday      
    }Week;
老方法的问题是枚举值的数据范围是模糊的,这个数值可能非常大,可能是负数,无法界定

新写法:
[cpp] view plaincopy
    typedef enum Week:NSUInteger{  
        Moday,  
        Tuesday,  
        Wednesday,  
        Thursday,  
        Friday,  
        Saturday,  
        Sunday      
    }Week;
新方法在列出枚举内容的同时绑定了枚举数据类型NSUInteger,这样带来的好处是增强的类型检查和更好的代码可读性。

2、使用的方法代码放置的位置顺序无关
没在.h文件中声明的方法,在时候的时候如果方法不在前面,可能会有警告。
比如:
[cpp] view plaincopy
    @interface MyClass : NSObject  
    -(void)doSomething:(NSString *) print;  
    @end

实现:
[cpp] view plaincopy
    @implementation MyClass  
    -(void)doSomething:(NSString *)print{  
        NSLog(@"%@", [print stringByAppendingFormat:[self getString]]);  
    }  
    -(NSString *)getString{  
        return@"string for something";  
    }  
    @end
早期编译器编译时会出现:warning: instance method ‘-getString:’ not found…
新的编译器会先扫描代码中的方法,然后再编译,这样就避免了找不到方法这种情况了


3、property属性简化
@property对于使用Objective-C的程序员来说是相当熟悉的,property方便自动生成变量的getter 和setter。在.h文件中声明之后,还要在.m文件中加上@synthesize关键字,这样才能完成自动getter 和setter的过程。

比如说,我在.h文件中写了
@property (strong, nonatomic) NSDictionary *order;
我还要去对于的.m文件中写上
@synthesize order;


是不是感觉很多余啊?现在在语法新特性中不用写这行代码了,新版的编译器帮你实现这行代码,这叫帮人帮到底。

也是说,你在.h文件中声明order属性后,就可以直接在实现文件中使用该属性的getter和setter方法,编译器还会根据属性的可读和可写自动判断是否提供setter方法。智能多了。


4、语法的简化
做过java 或C#开发的都知道,初始化或赋值一个变量一般用一个“=”号就搞定了,到了Objective-C后,每次都要用一个很长的函数才能赋值活初始化。现在简化多了。

咱们看看各个数据类型简化前后的对比。
4.1、NSNumber 类型

老写法:
[cpp] view plaincopy
    NSNumber *number;  
    number = [NSNumber numberWithChar:'X'];  
    number = [NSNumber numberWithInt:12345];  
    number = [NSNumber numberWithUnsignedLong:12345ul];  
    number = [NSNumber numberWithLongLong:12345ll];  
    number = [NSNumber numberWithFloat:123.45f];  
    number = [NSNumber numberWithDouble:123.45];  
    number = [NSNumber numberWithBool:YES];  

新写法:
[cpp] view plaincopy
    NSNumber *number;  
    number = @'X';  
    number = @12345;  
    number = @12345ul;  
    number = @12345ll;  
    number = @123.45f;  
    number = @123.45;  
    number = @YES;  

4.2、NSArray类型
老写法:
[cpp] view plaincopy
    NSArray *array;  
    array = [NSArray arrayWithObjects:@"object1", @"object2", @"object3", nil];

新写法:
[cpp] view plaincopy
    NSArray *array = @[ @"object1", @"object2", @"object3" ];
新的写法去掉了后面讨厌的nil。

4.3、NSDictionary类型
老写法
[cpp] view plaincopy
    NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"value1", @"value2", @"value3"]  
                                       forKeys:@[@"key1", @"key2", @"key3"]];
新写法
[cpp] view plaincopy
    NSDictionary *dict = @{@"key1": @"value1",@"key2": @"value2",@"key3": @"value3" };  
    NSLog(@"%@", dict);  

运行结果正常:
{
    key1 = value1;
    key2 = value2;
    key3 = value3;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习是一种人工智能(AI)的子领域,致力于研究如何利用数据和算法让计算机系统具备学习能力,从而能够自动地完成特定任务或者改进自身性能。机器学习的核心思想是让计算机系统通过学习数据的模式和规律来实现目标,而不需要显式地编程。 机器学习应用非常广泛,包括但不限于以下领域: 图像识别和计算机视觉: 机器学习在图像识别、目标检测、人脸识别、图像分割等方面有着广泛的应用。例如,通过深度学习技术,可以训练神经网络来识别图像的对象、人脸或者场景,用于智能监控、自动驾驶、医学影像分析等领域。 自然语言处理: 机器学习在自然语言处理领域有着重要的应用,包括文本分类、情感分析、机器翻译、语音识别等。例如,通过深度学习模型,可以训练神经网络来理解和生成自然语言,用于智能客服、智能助手、机器翻译等场景。 推荐系统: 推荐系统利用机器学习算法分析用户的行为和偏好,为用户推荐个性化的产品或服务。例如,电商网站可以利用机器学习算法分析用户的购买历史和浏览行为,向用户推荐感兴趣的商品。 预测和预测分析: 机器学习可以用于预测未来事件的发生概率或者趋势。例如,金融领域可以利用机器学习算法进行股票价格预测、信用评分、欺诈检测等。 医疗诊断和生物信息学: 机器学习在医疗诊断、药物研发、基因组学等领域有着重要的应用。例如,可以利用机器学习算法分析医学影像数据进行疾病诊断,或者利用机器学习算法分析基因数据进行疾病风险预测。 智能交通和物联网: 机器学习可以应用于智能交通系统、智能城市管理和物联网等领域。例如,可以利用机器学习算法分析交通数据优化交通流量,或者利用机器学习算法分析传感器数据监测设备状态。 以上仅是机器学习应用的一部分,随着机器学习技术的不断发展和应用场景的不断拓展,机器学习在各个领域都有着重要的应用价值,并且正在改变我们的生活和工作方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值