字符串与序列化

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 别说月老有意,休提孟婆无情,一个牵了情丝,一个断了红尘,勿再说些永恒誓言,都经不起无常岁月沧桑易变。既然来到人间,...
    海盗lucifer阅读 1,423评论 1 0
  • 风光无限好 珍惜眼前人 前世一场梦 来世一场空 17.11.30.凌晨3点
    723edf844d12阅读 2,593评论 19 31
  • 平时,我们总习惯任时光从指尖流逝,关键时候,我们总叹息时间不够用。归根结底,还是没有养成良好习惯,自我规划和自我控...
    迷彩校尉阅读 1,639评论 0 0
  • 4/100 无忧台州 每日一结构(可不连续,但需补做)-补11.30 G:【超级个体5-2】你和物品的关系,就...
    无忧侠阅读 1,405评论 0 0
  • 近两年来,区块链技术发展迅猛,相关应用不断落地,市场逐渐呈现出井突态势,越来越多的社会精英涌入区块链创业大军。而“...
    热情A阅读 1,495评论 0 0

友情链接更多精彩内容