您的位置:首页 > 其它

字符串,字面常量,日期和时间

2016-03-24 17:47 190 查看

字符串和 NSString 字面常量

作为 C 的超集,Objective-C 支持的、用于指定字符串的约定与 C 相同:单个字符使用单引号括起来,字符串则使用双引号括起来。但是,Objective-C 框架通常不使用 C 字符串。相反,它们使用 NSString 对象。 在“您的首个 iOS 应用程序”中创建 HelloWorld 应用程序时,创建了一个格式化字符串:

NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString];
NSString 类为字符串提供对象包装器,这提供了很多便利,如内建内存管理用于储存任意长度的字符串、支持各种字符编码(特别是 Unicode),以及提供了 printf 样式的格式化实用工具。因为您通常使用这样的字符串,所以 Objective-C 提供速写记法来根据常量值创建 NSString 对象。要使用此 NSString 字面常量,只需在普通双引号字符串前面添加 @ 符号,如下例所示:

// Create the string "My String" plus carriage return. 
NSString *myString = @"My String\n"; 
// Create the formatted string "1 String".
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"]; 
// Create an Objective-C string from a C string.
NSString *fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];

NSNumber 字面常量

Objective-C 还提供速写记法来创建 NSNumber 对象,从而无需调用初始化程序或类工厂方法,来创建此类对象。只需在数值前面添加@ 符号,并可选择在后面添加一个值类型指示。例如,要创建封装一个整数值和一个双精度值的 NSNumber 对象,您可以编写以下代码:
NSNumber *myIntValue = @32; NSNumber *myDoubleValue = @3.22346432;

您甚至可以使用 NSNumber 字面常量,创建封装的 Boolean 值和字符值。

NSNumber *myBoolValue = @YES; NSNumber *myCharValue = @'V';
您可以创建 NSNumber 对象,表示无符号整型 (unsigned integers)、长整型 (long integers)、长长整型 (long long integers) 和浮点值 (float values),方法是将字符“U”、“L”、“LL”和“F”分别追加到记号值末尾。例如,要创建一个 NSNumber 封装一个浮点值,您可以编写以下代码:

NSNumber *myFloatValue = @3.
4000
2F;

日期和时间

NSDate 对象与其他种类的值对象不同,这是因为以时间作为基本值的独特性质。日期对象封装自参考日期算起的时间间隔(以秒为单位)。该参考日期是 GMT 2001 年 1 月 1 日开始的那一刻。 仅通过 NSDate 的实例本身,您无法做些什么。它的确表示某个时刻,但这种表示方式没有由一个区域的日历、时区和时间约定所提供的关联。幸运的是,有一些 Foundation 类可以表示这些概念性实体:

 NSCalendar 和 NSDateComponents——您可以将日期与日历关联,然后从该日期的日历派生时间单位,如年、月、小时和星期几。您还可以执行日历运算。

 NSTimeZone——在日期和时间必须反映某个区域的时区时,可以将时区对象与日历关联。

 NSLocale——区域对象封装了文化和语言约定,包括与时间相关的那些约定。
以下代码片段说明了如何将 NSDate 对象与其他此类对象配合使用,以获取您想要的信息(在本示例中,当前时间按照小时、分钟和秒数打印出来)。

NSDate *now = [NSDate date]; // 1
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
[calendar setTimeZone:[NSTimeZone systemTimeZone]]; // <span style="font-family: Arial, Helvetica, sans-serif;">3 </span>
<span style="font-family: Arial, Helvetica, sans-serif;">NSDateComponents *dc = [calendar components:(NSHourCalendarUnit|NSMinuteCalendarUnit| NSSecondCalendarUnit) fromDate:now]; // 4 </span>
NSLog(@"The time is %d:%d:%d", [dc hour], [dc minute], [dc second]); // 5

本列表解释代码的每个编号行:

1. 创建表示当前时刻的日期对象

2. 创建表示公历的对象

3. 使用表示时区(在“系统偏好设置”中指定的时区)的对象设定日历对象。

4. 在日历对象上调用 components:fromDate: 方法,传入在步骤 1 中已创建的日期对象。此调用返回一个对象,该对象包含该日期对象的小时、分钟和秒数分量。

5. 将当前小时、分钟和秒数记录到控制台
尽管此示例记录了结果,但在应用程序用户界面上显示日期信息的首选方法,是使用日期格式化程序(NSDateFormatter 类的实例)。

您应该经常将合适的类和方法用于日历计算;对于分钟、小时和天等单位,请勿对数值进行硬编码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: