Cocoa和Cocoa Touch 框架
对于OSX开发,会使用Cocoa框架,它是一种支持应用程序提供丰富用户体验的框架.它实际上由Foundation和ApplicationKit(AppKit)框架组成。
对于IOS开发,会使用CocoaTouch框架,它实际上由Foundation和UIKit框架组成。
Foundation框架
Foundation是OSX和IOS应用程序开发的基础框架,它包括了一些基本的类,如数字、字符串、数组、字典等。
一 数字类NSNumber
在objective-C语言中有一些基本数据类型:int、char、float和double,但是它们都不是类,不具有方法、成员变量和属性以及面向对象的特征。为了实现“一切都是对象”,在Foundation框架中使用NSNumber类来封装这些数字类型。这样数字就具有面向对象的基本特征了。
获得NSNumber对象:
- 通过构造函数创建
- 通过工厂设计模式创建,OC和Swift.x有,Swift2.x没有
- 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(@"大于");
}
- 从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:字符串查找。
- length:返回Unicode字符的长度属性
- uppercaseString:换称为大写属性
- lowercaseString:换成小写属性
- initWithCapacity:构造函数,通过一个容量构造另外一个NSMutablestring对象。
- insertString:atlndex:插入字符串,不会创建新的对象。
- appendString:追加字符串,不会创建新的对象。
- deleteCharacterInRange:在一个范围内删除字符串,不会创建新的对象。
- replaceCharacterslnRange:withString:替换字符串,不会创建新的对象。
- 在Swift中使用字符串有可能会使用Foundation中的NSString和Swiff中的原生字符串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属性,获得数组的最后一个元素
- - initWithCapacity:实例构造方法
- - addObject:在数组的尾部追加一个元素
- - insertObject:atIndex 按照索引插入一个元素
- - removeObject 移除特定元素
- - removeObjectAtIndex 移除特定索引的元素
- NSArray与Swift原生数组之间的关系如同NSString与String之间的关系,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)
}
四 字典类
- -initWithObjects:forKeys:。实例构造方法。
- -initWithObiectsAndKeys:。实例构造方法。
- -initWithContentsOfFile:。从属性文件中创建对象。
- -objectForKey:。通过键获得值对象。
NSDictionary常用属性
- count。字典集合的长度。
- allKeys。返回所有键集合。
- allVa}ues。返回所有值集合。
- -initWithCapacity:。实例构造方法。
- -setWbiect:forKey:。通过键和值。
- -removeObjectForKey:。按照键移除值。
- -writeToFile:atomically:。把对象写入到文件中。
- NSDictionary与Swift原生字典之间的关系如同NSArray与Swift原生数组之间的关系,Swift在底层能够将它们自动桥接起来,一个NSDICtiona对象桥接之后的结果是[NSObject:AnyObject]字典(键为NSObject类型,值为AnyObject类型的Swift原生字典)。
- 从Swift原生字典对象桥接到NSDictionary对象这个过程中是自动类型转换。从NSDictionary对象桥接到[NSObject:AnyObject]对象这个过程中需要进行强制类型转换。这两个方向的桥接转换都是“零开销”的。
- AnyObject可以表示任何类,相当于Objective一C中的id类型。
- NSObject是加入一些“对象”基本功能的类,例如:isEqual和hash等。相当于ObjeCtive一C中的id类型。
- Any可以表示任何类型。范围:NSObject<AnyObject<Any
- 字面量(Iiteral)是用于表达代码中一个固定值的表示法。几乎所有计算机编程语言都具有对基本数据类型的字面量表示,诸如:整数、浮点数以及字符串。
- 现代Objective-C提供了数字类、数组类和字典类等字面量。