Foundation框架1

  • 什么是框架
    • 众多功能API的集合
  • Foundation框架的作用
    • Foundation框架是MaciOS中其他框架的基础
    • Foundation框架包含了很多开发中常用的数据类型
      • 结构体
      • 枚举
  • 如何使用Foundation框架
    • 要想使用Foundation框架中的功能,包含它的主文件即可

  #import <Foundation/Foundation.h>

Foundation框架中的类

  • Foundation框架提供了非常多好用的类,比如
    • NSString:字符串
    • NSArray:数组
    • NSDictionary:字典
    • NSDate:日期
    • NSData:数据
    • NSNumber:数字
  • Fouondation框架中的类都是以NS为前缀[Next Step]
    • 乔布斯于1976年创立苹果公司
    • 乔布斯于1985年离开苹果公司,创立Next公司,开发了Next Step操作系统
    • 在开发Next Step操作系统过程中产生了Foundation框架
    • 1997年,苹果公司收购Next公司,乔布斯重返苹果公司(Mac系统就是基于Next Step系统)
    • 2007年,苹果公司发布了iOS系统(iOS系统基于Mac系统)

不小心修改了系统文件

  • 有时候会在不经意之间修改了系统自带的头文件,比如NSString.h,这是会出现以下错误

Foundation框架1

    • 解决方案很简单,只需要删除Xcode的缓存即可,缓存路径是
      • /User/用户名/Library/Developer/Xcode/DerivedData(默认情况下,这是一个隐藏文件夹)
    • 要想看到上述文件夹,必须在终端敲指令显示隐藏文件夹,指令如下
      • 显示隐藏文件:defaults write com.apple.finder AppleShowAllFiles - bool true
      • 隐藏隐藏文件:defaults write com.apple.finder AppleShowAllFiles - bool false

      (输入指令后,一定要重新启动Finder)

NSString

  • 什么是NSString
    • 一个NSString对象就代表一个字符串(文字内容)
    • 一般称NSString为字符串类
  • 下图中的文字内容普遍都是用NSString来表示的

Foundation框架1

NSString的创建

  • NSString的创建方式比较多
    • 最直接的方式(这是常量字符串)
      • NSString *str = @"I'm in itcast";
    • 格式化的方式
      • NSString *str = [NSString stringWithFormat:@"My age is %d",10];
      • NSString *str = [[NSSring alloc] initWithForm:@"My age is %d",10];
    • 从文件中读取
//用来保存错误信息
NSError *error = nil;
//读取文件内容
NSString *str = [NSString stringWithContentsOfFile:@"/Users/mj/Desktop/text.txt" encoding:NSUTF8StringEncoding error:&error];
//如果有错误信息
if (error) {
  NSLog(@"读取失败,错误原因是:%@",[error localizedDescription]);      
}else { // 如果没有错误信息
    NSLog(@"读取成功, 文件内容是:
%@", str);
}
    • 从URL重读取
// 用来保存错误信息
NSError *error = nil;

// 创建URL路径
NSURL *url = [NSURL URLWithString:@"file:///Users/mj/Desktop/test.txt"];

// 读取文件内容
NSString *str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

// 如果有错误信息
if (error) {
    NSLog(@"读取失败, 错误原因是:%@", [error localizedDescription]);
} else { // 如果没有错误信息
    NSLog(@"读取成功, 文件内容是:
%@", str);
}

URL

  • 什么是URL
    • URL的全称是Uniform Resource Locator (统一资源定位符)
    • URL是互联网上标准资源的地址
    • 互联网上的每个资源都有一个唯一的URL,它包含的信息指出资源的位置
    • 根据一个URL就能找到唯一的一个资源
  • URL的格式
  • 常见的URL协议头(URL类型)
    • httphttp:超文本传输协议资源,网络资源
    • ftp:文件传输协议
    • file:本地电脑的文件

URL的创建

  • 传入完整的字符串创建
    • NSURL *url = [NSURL URLWithString:@"file:///Users/mj/Desktop/str.txt"];
  • 通过文件路径创建(默认就是file协议的)
    • NSURL *url = [NSURL fileURLWithPath:@"/User/mj/Desktop/str.txt"];

NSString的存储

  • 可以将NSString存储到一个文件中
NSString  *str = @"哇哈哈哈";
[str writeToFile:@"/Users/mj/Desktop/str.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

[str writeToURL:[NSURL URLWithString:@"/Users/mj/Desktop/str.txt"] atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSString的大小写处理

  • - (NSString *)uppercaseString;
    • 全部字符转为大写字母
  • - (NSString *)lowercaseString;
    • 全部字符转为小写字母
  • - (NSString *)capitalizedString;
    • 首字母变大写,其他字母都变小写

NSString的比较

  • - (BOOL)isEqualToString:(NSString *)aString;
    • 两个字符串的内容相同就返回YES,否则返回NO
  • - (NSComparisonResult)compare:(NSString *)string;
    • 这个方法可以用来比较两个字符串内容的大小
    • 比较方法:逐个字符的进行比较ASCII值,返回NSComparisonResult作为比较结果
    • NSComparisonResult是一个枚举,有3个值:
      • 如果左侧>右侧,返回NSOrderedDescending
      • 如果左侧<右侧,返回NSOrderedAscending
      • 如果左侧==右侧,返回NSOrderedSame
  • - (NSComparisonResult) caseInsensitiveCompare:(NSString *)string;
    • 忽略大小写进行比较,返回值与compare:一致

NSString的搜索

  • - (BOOL)hasPrefix:(NSString *)aString;
    • 是否以aString开头
  • - (BOOL)hasSuffix:(NSString *)aString;
    • 是否以aString结尾
  • - (NSRange)rangeOfString:(NSString *)aString;
    • 用来检查字符串内容中是否包含了aString
    • 如果包含,就返回aString的范围
    • 如果不包含,NSRange的location为NSNotFound,length为0

NSRange

  • NSRange是Foundation框架中比较常用的结构体,它的定义如下:
typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;
// NSUInteger的定义
typedef unsigned int NSUInteger;
  • NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围
  • NSRange有两个成员
    • NSUInteger location:表示该范围的起始位置
    • NSUInteger length:表示该范围内的长度
  • 比如@"I love iOS"中的@"iOS"可以用location为7,length为3的范围来表示

NSRange的创建

  • 有三种方式创建一个NSRange变量
    • 方式1
NSRange range;
range.location = 7;
range.length = 3;
    • 方式2
NSRange range = {7, 3};
或者 
NSRange range = {.location = 7,.length = 3};
    • 方式3
NSRange range = NSMakeRange(7, 3);

NSString的截取和替换

  • - (NSString *) substringFromIdex:(NSUInteger)from;
    • 从指定位置from开始(包括指定位置的字符)到尾部
  • - (NSString *) substringToIndex:(NSUInteger)to;
    • 从字符串的开头一直截取到指定的位置to,但不包括该位置的字符
  • - (NSString *) substringWithRange:(NSRange)range;
    • 按照所给出的NSRange从字符串中截取子串
  • - (NSString *) stringByReplacingOccurrencesOfString: (NSString *) target withString:(NSString *) replacement;
    • 用replacement替换了target

NSString与路径

  • - (BOOL)isAbsolutePath;
    • 是否绝对路径
  • - (NSString *) lastPathComponent;
    • 获得最后一个目录
  • - (NSString *) stringByDeletingLastPathComponent;
    • 删除最后一个目录
  • - (NSString *) stringByAppendingPathComponent:(NSString *)str;
    • 在路径的后面拼接一个目录
    • (也可以使用stringByAppendingString:或者stringByAppendingFormat:拼接字符串内容)

NSString与文件拓展名

  • - (NSString *)pathExtension;
    • 获得拓展名
  • - (NSString *)stringByDeletingPathExtension;
    • 删除尾部的拓展名
  • - (NSString *)stringByAppendingPathExtension:(NSString *)str;
    • 在尾部添加一个拓展名

NSString的其他用法

  • - (NSUinteger) length;
    • 返回字符串的长度(有多少个文字)
  • - (unichar) characterAtIndex:(NSUInteger)index;
    • 返回index位置对应的字符
  • 转为基本数据类型
    • - (double)doubleValue;
    • - (float) floatValue;
    • - (int) intValue;
  • - (char *)UTF8String;
    • 转为C语言中的字符串

NSString去空格

  • 去除所有的空格
    • [str stringByReplacingOccurrencesOfString:@" " withString:@""];
  • 去除首位的空格
    • [str stringByTrimmingCharactersInSet:[NSCharacterSetwhitepaceCharacterSet]];