字符串与序列化

1. 字符串

字符串创建

创建一个空的字符串: let emptyString = ""

使用初始化器来创建: let aString = string()

查看字符串是否为空: aString.isEmpty

字符串拼接: var a = "Hello";    a += ", World!"

字符串其实就是一个有Character对象组成的序列.

var veversedString  = ""

for character in "Hello" {

        reversedString = String(character) + reversedString;

}        //reversedString: olleH

计算字符串中有多少个字符: countElements("Hello")        //=5

2. CountElements函数实际上可以计算任意集合中元素的个数, 包含数组和字典, Sting中字符个数不等于字符数, Unicode字符的大小范围为1~4个字节, 具体取决于类型(例如: emoji为4个字节)

3. 比较字符串, 比较两个字符串只需要使用==运算符, 这个运算符检查两个字符串中的内容

let string1: Sting = "Hello";        let sting2: String = "hell";        if  string1 == string2 {}

4. 查看两个字符串变量是否引用同一个对象, 使用===运算符.

if string1 as AnyObject === string2 as AnyObject {  println("are the same object")  }

5. 查找字符串, 可以利用hasPrefix和hasSuffix方法查看字符串是否具有前缀后缀

if string1.hasPrefix("H") {}        if string1.hasSuffix("l")

6. 字符串转NSData

let stringToConvert = "Hello, Swift"

let data = stringToConvert.dataUsingEncoding(NSUTF8StringEncoding)

7. 从文件和URL加载数据

从URL加载:

if let fileURL = NSBundle.mainBundle().URLForResource("SomeFile", withExtension: "txt") {

        let loadedDataFromURL = NSData(contentsOfURL: fileURL)

}

从文件中加载

if let filePath = NSBundle.mainBundle().pathForResouce("SomeFile", ofType: "txt") {

        let loadedDataFromPath = NSData(contentsOfFile: filePath)

}

8. 序列化与反序列化, 我们可以将对象转化为数据, 为此首先遵循NSObject和NSCoding协议. 然后实现两个方法, 一个是encodeWithCoder, 一个是以NSCoder为参数的初始化函数.

class SerializableObject: NSObject, NSCoding {

        var name: String?

        func encodeWithCoder(aCoder: NSCoder) {

                aCoder.encodeObject(name!, forKey:@"name")

        }

        override init () {

                self.name = "My Object"

        }

        required init(coder aDecoder: NSCoder) {

                self.name = aDecoder.decodeObjectForKey("name") as? String

        }

}

9. 通过NSKeyedArchiver和NSKeyedUnarchiver类从NSData中加载对象, 

let anObject = SerializableObject ()

anObject.name = "I'm saving"

let objectConvertToData = NSKeyedArchiver.archiverDataWithRootObject(anObject)

//将其转换成对象, 有可能返回失败, 所以unArchiverObjectWithData是可选值, 因此要用as?来参看是否成功.

let loadedObject = NSKeyedUnarchive.unarchiveObjectWithData(objectCovertToData) as? SerializableObject

你可能感兴趣的:(字符串与序列化)