Ryan的OC学习总结-----9 Foundation框架

Cocoa和Cocoa Touch 框架

对于OSX开发,会使用Cocoa框架,它是一种支持应用程序提供丰富用户体验的框架.它实际上由Foundation和ApplicationKit(AppKit)框架组成。

对于IOS开发,会使用CocoaTouch框架,它实际上由FoundationUIKit框架组成。

Foundation框架

Foundation是OSX和IOS应用程序开发的基础框架它包括了一些基本的类,如数字、字符串、数组、字典等。


一 数字类NSNumber

在objective-C语言中有一些基本数据类型:int、char、float和double但是它们都不是类,不具有方法、成员变量和属性以及面向对象的特征。为了实现“一切都是对象”,在Foundation框架中使用NSNumber类来封装这些数字类型。这样数字就具有面向对象的基本特征了。

获得NSNumber对象:

  • 通过构造函数创建
  • 通过工厂设计模式创建,OC和Swift.x有,Swift2.x没有

很关键:学会看API帮助文档!!!!


- isEqualToNumber:

SWIFT

func isEqualToNumber(_ number : NSNumber) -> Bool

OC

- (BOOL)isEqualToNumber : (NSNumber *)aNumber

- compare

SWIFT

func compare(_ otherNumer : NSNumber) -> NSComparisonResult

OC

- (NSComparisonResult)compare : (NSNumber *)aNumber

isEqualToNumber只是比较是否相等,而compare方法可以比较是否相等/大于/小于,它的返回值是NSComparisonResult枚举类型。

SWIFT示例:

var intVar = 80
var intNumber = NSNumber(integer:intVar)
var doubleNumber = NSNumber(double : 80.0)

if intNumber,isEqualToNumber(doubleNumbe){
      NSLog("相等")
}else{
      NSLog("不相等")
}

switch intNumber.compare(doubleNumber){
      case .OrderAscending:
            NSLog("第一个数小于第二个数")
      case .OrderSame:
            NSLog("第一个数等于第二个数")
       case .OrderDescanding:
            NSLog("第一个数大于第二个数")            
}
OC代码示例:

int intVar = 80;
NSNumber *intNumber = [[NSNumber alloc] initWithInteger : intVar];
NSNumber *doubleNumber = [NSNumber numberWithDouble : 80.0];

if ([initNumber isEqualToNumber : doubleNumber]){
      NSLog(@"相等")
}else{
      NSLog(@"不相等")
}

switch([intNumber compare : doubleNumber]){
      case NSOrderAscending:
            NSLog(@"小于");
            break;
       case NSOrderSame:
             NSLog(@"等于");
             break;
        default:
             NSLog(@"大于");
}


NSNumber与Swift原生数字类型之间的桥接:

  • 从Swift原生数字类型桥接到NSNumber这个过程是会自动类型转换的。
  • 从NSNumber对象桥接到Swift原生数字类型这个过程中需要进行强制类型转换。
  • 这两个方向的桥接转换都是Toll-Free Bridge(零开销桥接)的。

let number1 = 0
//Int自动转换为NSNumber
let number2 : NSNumber = number1

var number3 = 0
//NSNumber强制类型转换为Int
number3 - number2 as Int


二 字符串类

在Foundation框架中,字符串类有两种:不可变字符串类NSString和可变字符串类NSMutablestring。

NSString是定义固定大小的字符串,NSMutablestring可对字符串做追加、删除、修改、插入和拼接等操作,而不会产生新的对象。


NSString类方法:

  • initWithString:构造函数,通过一个NSString对象构造另外一个NSString对象。
  • stringByAppendingString:实现了字符串的拼接,这个方法会产生下一个新的对象。
  • isEqualTostring:较两个字符串是否相等。
  • compare:比较两个字符串大小。
  • substringTolndex:可以获得字符串的前x个字符串。
  • substringFrom}ndex:可以截取x索引位置到尾部字符串。
  • rangeofstring:字符串查找。
NSString类属性
  • length:返回Unicode字符的长度属性
  • uppercaseString:换称为大写属性
  • lowercaseString:换成小写属性
NSMutableString类方法
  • initWithCapacity:构造函数,通过一个容量构造另外一个NSMutablestring对象。
  • insertString:atlndex:插入字符串,不会创建新的对象。
  • appendString:追加字符串,不会创建新的对象。
  • deleteCharacterInRange:在一个范围内删除字符串,不会创建新的对象。
  • replaceCharacterslnRange:withString:替换字符串,不会创建新的对象。

NSString与Swift原生字符串之间的桥接

  • 在Swift中使用字符串有可能会使用Foundation中的NSStringSwiff中的原生字符串String。Swift在底层能够将String与NSString无缝桥接起来,String可调用NSStrlng的全部API。
  • 从String对象桥接到NSString对象这个过程中是自动类型转换,从NSString对象桥接到String对象这个过程中需要进行强制类型转换。这两个方向的桥接转换都是“零开销”的。
import Foundation
let foundationString : NSString = "alpha bravo charlie delta echo"
//NSString -> String
let swiftString : String = foundationString as String
//String ->NSString
let foundationString2 : NSString = swiftString
//调用了NSString的componentsSeparatedByString方法
let swiftArry = swiftString.componentsSeparatedByString("")

let intString : NSString = "456"
let intValue = Int(intString as String)

三 数组类

在Foundation框架中,数组被封装为类,数组有两种:NSArray不可变数组类和NSMutableArray可变数组类。

NSArray常用方法

  • - initWithArray:构造函数
  • - initWithObjects:构造函数
  • - objectAtIndex:按照索引返回数组中的元素
  • - containsObject: 是否包含某一元素

NSArray 常用属性

  • count 属性,返回当前数组的长度
  • firstObject属性,获取数组的第一个元素
  • lastObject属性,获得数组的最后一个元素
NSMutableArray类
  • - initWithCapacity:实例构造方法
  • - addObject:在数组的尾部追加一个元素
  • - insertObject:atIndex 按照索引插入一个元素
  • - removeObject 移除特定元素
  • - removeObjectAtIndex 移除特定索引的元素
【Swift】NSArray与Swift原生数组之间的桥接
  • NSArray与Swift原生数组之间的关系如同NSStringString之间的关系,Swift在底层能够将它们自动地桥接起来。一个NSArray对象桥接之后的结果是[AnyObject]数组。
  • 从[AnyObject]对象桥接到NSArray对象这个过程中是自动类型转换,从NSArray对象桥接到[AnyObject]对象这个过程中需要进行强制类型转换。这两个方向的桥接转换都是“零开销”的。
import Foundation

let foundationString : NSString = "alpha bravo charlie delta echo"
//[String] -> NSArray
let foundationArray : NSArray = foundationString.componentsSeparatedByString("")

//NSArray -> [String]'
let swiftArray : [String] = foundationArray as! [String]

for item in foundationArray{
      print(item)
}

for item in swiftArray{
      print(item)
}

四 字典类

字典集合,它是由“键一值”对构成的集合。键集合不能重复,值集合没有特殊要 求。键和值集合中的元素可以是任何对象,但是不能是 nil 。与数组类一样,字典类也分为NSDictionary不 可变字典和NSMutableDictionary可变字典。

NSDictionary类

NSDictionary常用方法

  • -initWithObjects:forKeys:。实例构造方法。
  • -initWithObiectsAndKeys:。实例构造方法。
  • -initWithContentsOfFile:。从属性文件中创建对象。
  • -objectForKey:。通过键获得值对象。

NSDictionary常用属性

  • count。字典集合的长度。
  • allKeys。返回所有键集合。
  • allVa}ues。返回所有值集合。
NSMutableDictionary类
NSMutableDictionary常用方法:
  • -initWithCapacity:。实例构造方法。
  • -setWbiect:forKey:。通过键和值。
  • -removeObjectForKey:。按照键移除值。
  • -writeToFile:atomically:。把对象写入到文件中。
NSDictionary与Swift原生字典之间的桥接:
  • NSDictionary与Swift原生字典之间的关系如同NSArraySwift原生数组之间的关系,Swift在底层能够将它们自动桥接起来,一个NSDICtiona象桥接之后的结果是[NSObject:AnyObject]字典(键为NSObject类型,值为AnyObject类型的Swift原生字典)。
  • 从Swift原生字典对象桥接到NSDictionary对象这个过程中是自动类型转换。从NSDictionary对象桥接到[NSObject:AnyObject]对象这个过程中需要进行强制类型转换。这两个方向的桥接转换都是“零开销”的。
给Swift同学的小贴士:

  • AnyObject可以表示任何类,相当于Objective一C中的id类型。
  • NSObject是加入一些“对象”基本功能的类,例如:isEqual和hash等。相当于ObjeCtive一C中的id类型。
  • Any可以表示任何类型。范围:NSObject<AnyObject<Any


五 OC字面量
  • 字面量(Iiteral)是用于表达代码中一个固定值的表示法。几乎所有计算机编程语言都具有对基本数据类型的字面量表示,诸如:整数、浮点数以及字符串。
  • 现代Objective-C提供了数字类、数组类和字典类等字面量。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值