博客> 第四章字符串和集合
第四章字符串和集合
2018-06-18 01:59 评论:0 阅读:269 易_君
ios swift

字符串和集合: //: Playground - noun: a place where people can play /** 字符概述: let/var 名称:Character = "值" let/var也是区分关键字是否可变。

转义字符:当使用双引号表示某些字符时,有时候输出的结果并不是我们所想要,如"\"字符比较特殊不能够使用双引号表示,这时,需要在字符"\"的前面插入一个转转义符"\",即对字符这样转义"\" 常见的转义字符——说明: \t —— 水平制表符 \n —— 换行 \r —— 回车 \" —— 双引号 \' —— 单引号 \ —— 反斜线 注意:Swift语言采用Unicode编码,它的字符几乎涵盖了大家所知的一切字符,包括图片表情

*/

import UIKit

//字符 let ch:Character = "c" //与C语言中的字符不同,Swift的字符是使用双引号包含的,并且它的值只能是一个字母、数字、汉字或者符号 print(ch)

//转义字符 let cha:Character = "\" print(cha)

//字符串 //通过字面量赋值的方式初始化字符串 let tempString = "this is temp string" print(tempString)

//通过创建String实例的方式初始化字符串 let anotherString = String() print("--(anotherString)") //仅仅输出了--,anotherString输出为空字符

if anotherString.isEmpty { //isEmpty属性,判断字符串是否为空 print("啥都没有") }

//字符串的基本操作 /* 获取字符串的长度: 1.调用lengthOfBytes方法,该方法是获取字符串中字节的个数 2.直接计算字符的个数 / let string = "Hello World" let len1 = string.lengthOfBytes(using: String.Encoding.utf8) print(len1) let len2 = string.characters.count print(len2)

/* 字符串的遍历: String表示特定序列的字符值的集合,每一个字符值代表一个Unicode字符。可利用for-in循环来遍历字符串的每一个字符 / for c in string.characters { //通过characters获取了string的字符集合 print(c) }

/** 连接字符串和字符: let定义的字符串是不可修改的,无法进行连接操作,只有var定义的字符串可以修改,想要进行修改可以通过如下三种方式: 1.使用加法赋值运算符连接字符串 2.使用加法运算符拼接字符串 3.调用append方法追加字符串

比较String和NSString 在截取字符串的子串的过程中,可能会经常见到str as NSString 或者 str as String来回转换字符串,有些操作用NSString比较方便,但是有些操作恰恰相反,String保留了大部分NSString的API,如hasPrefix,subStringWithRange等。区别: (1)String是一个结构体类型,而NSString是一个继承自NSObject基类对象 (2)两者都可以使用自己的类名来直接进行初始化,从表面上看写法相同,但是NSString的意思是初始化了一个指针指向了这个字符串,但是String是把字符串的字面量赋值给常量或变量 (3)String的字符串拼接比NSString更加方便,NSString需要使用append或者stringWithFormat将两个字符串拼接,而Swift仅仅使用'+'号就能够实现 (4)string可以实现遍历输出一个字符串内部所有字符,而NSString是做不到的,这是因为String继承了CollectionType协议 (5)NSString直接使用length就可以获得字符串的长度,但是Swift是真正的类似于length的方法就是取出character属性获得字符集合,然后使用count属性计算即可

*/ var varString = "itcast" //定义了一个可变字符串 varString += ".com" //使用 += 运算符连接.com print(varString)

let string1 = "Hello" let string2 = " World" var string3 = string1 + string2 //使用 + 连接字符串组成一个新字符串 print(string3)

let character:Character = "!" string3.append(character) print(string3)

/* 字符串插值: 是一种构建新字符串的方式,可以在其中包含常量、变量、字面量和表达式,插入的字符串字面量的每一项都在以反斜线为前缀的小括号中 / let multiplier = 3 //将multiplier插入到字符串中 let message = "(multiplier)乘以2.5等于(Double(multiplier) * 2.5)" print(message)

/* 格式字符串: y用于表示时间的字符串,一般都要求有着固定的格式,为此,String提供了两个常用的构造函数,将字符串按照一定的格式显示 / let hour = 8 let minute = 5 let seconds = 6

let dateString = String(format: "d:d:d", arguments:[hour,minute,seconds]) print(dateString)

let dateString2 = String(format: "d:d:d", hour,minute,seconds) print(dateString2)

/* 字符串的截取: as关键字 调用substring(with: NSMakeRange)方法 / let Nstring = "Hello World" //将Nstring转换为OC的字符串使用,并根据范围来截取字串 let subString = (Nstring as NSString).substring(with: NSMakeRange(1, 5)) print(subString)

/* 字符串的比较: 1.比较字符或字符串是否相等 2.比较字符串的前缀或后缀 / let emptyStr = "" let emptyStr2 = String() if emptyStr == emptyStr2 { //使用==判断两个字符串是否相等 print("相等") }else{ print("不相等") }

let ch1 = "" let ch2 = "c" if ch1 == ch2 { //使用==判断两个字符串是否相等 print("相等") }else{ print("不相等") }

//创建一个数组 let docFolder = ["java.docx","JavaBean.docx","Object-C.xlsx","Swift.docx"] //定义一个变量,用于统计docx文档的个数 var worldDocCount = 0 //遍历数组 for doc in docFolder { //如果后缀为.docx,worldDocCount加1 if doc.hasSuffix(".docx") { worldDocCount += 1 } } print("World文档中的个数为:(worldDocCount)")

//定义一个变量,用于统计关于Java文档的个数 var javaDocCount = 0 //遍历数组 for doc in docFolder { //转换为小写 let lowercaseStr = doc.lowercased() //如果前缀为"Java","javaDocCount加1 if lowercaseStr.hasPrefix("java") { javaDocCount += 1 }

} print("java相关文档个数为:(javaDocCount)")

/* 集合Collection Swift语言提供了数组,set和字典三种集合类型,用于存储集合数据。在Swift中通常用两种形式来定义数组类型,一种是Array的形式,Element表示数组中唯一存在的数据类型,另一种是[Element]这样简单的语法。 注意:数组对于存储数据有着具体的要求,数据元素在被存储进入某个数组之前,必须明确数据类型,方法是通过显示的类型标注或者类型推断 / var array1:Array //只能存储String类型的数据 var array2:[String] //等价于array1

//创建一个空数组 var someInts = [Int]() //用构造方式创建了一个Int类型的空数组

/*

  • 使用字面量构造数组 let 常量名:[类型] = [value1,value2,value3...] let 常量名 = [value1,value2,value3...] */

let array:[String] = ["Hello","Hi"] let arr = ["zhangsan",18] as [Any]

//两组数组相加来创建一个新数组 let arr1 = ["张三","李四"] let arr2 = ["王五"] print(arr1 + arr2)

//数组常见的操作 //获取数组的长度 let season:[String] = ["春","夏","秋","冬"] let length = season.count //获取数组元素的总个数 print(length)

//数组的遍历 for element in season{ //遍历数组 print(element) }

/* 数组元素的增加,删除,方法如下: 1.append(newElement:Element)方法,向数组的某位追加元素。 2.insert(_newElement:Element,at i:Int)方法,向某个索引位置插入元素。 3.removeFirst()方法,删除数组的第一个元素。 4.remove(at index:Int)方法,删除数组中指定位置的元素 5.removeLast()方法,删除数组的末尾元素。 6.removeAll(keepingCapacity keepCapacity:Bool = Default)方法,删除所有的元素,并且保留存储空间 / //定义一个可变数组 var var_array = ["zhangsan","lisi"] //在末尾追加一个元素 var_array.append("wangwu") print(var_array) //向指定位置插入一个元素 var_array.insert("zhaoliu", at: 2) print(var_array) //删除第一个元素 var_array.removeFirst() print(var_array) //删除最后一个元素 var_array.removeLast() print(var_array) //删除指定位置的元素 var_array.remove(at: 1) print(var_array) //删除所有元素 //var_array.removeAll() var_array.removeAll(keepingCapacity: true) print(var_array)

/* 使用下标语法修改数组 array[索引值],需要注意的是,数组的索引值必须存在的,否则会出现数组越界的运行时错误,由于数组越界问题,不可以使用下标访问的形式在数组的尾部添加新的元素 / //定义一个可变数组 var indexArray = ["One","Two","Three","Four","Five"] //使用下标语法修改1个元素 indexArray[0] = "Six" print(indexArray) //使用下标语法修改多个元素 indexArray[1...2] = ["Seven"] print(indexArray) //使用下标语法修改多个元素 indexArray[2...3] = ["English","Nine"] print(indexArray)

//数组的内存分配 //定义一个存放字符串的数组 var charray:[String] //分配空间 charray = [String]() for element in 0..<128 Swift数组可以使用加法赋值运算符(+=)或者加法运算符直接添加拥有相同类型的数组> Element表示Set中允许存储的类型,和数组不同的是,Set没有等价的简化式 */ //创建Set //创建空Set var letters = Set() //letters变量被推断为Set() Set([])

//用数组字面量创建Set var favoriteColor:Set = ["red","blud","greend"] //只允许存储String类型的值 var favoriteColorS:Set = ["红色","蓝色","绿色"] //自动推断类型为Set

/* 访问和修改Set 通过使用count属性,可以获取Set中元素的总个数;通过使用Set类型的方法,可以对Set实现增加、查找、删除的操作 / //获取Set中元素的数量 let count = favoriteColor.count //获取元素的个数 print("我喜欢的颜色有(count)种")

/* Set的增删查操作 insert(:)方法,添加一个新元素 remove(:)方法,删除一个元素,如果该值是Set的一个元素则删除该元素并返回被删除的元素值,如果Set不包含该值,则返回nil removeAll()方法,删除Set的所有元素 contains(_:)方法,检查Set中是否包含有一个特定的值,如果包含则返回true,否则返回false。 / //1.添加 favoriteColorS.insert("黄色") //2.删除 if let removeGreen = favoriteColorS.remove("绿色") { print("我已经不喜欢(removeGreen)了") }else{ print("我从来没有喜欢过这个颜色") } //3.检查是否包含某元素 if favoriteColorS.contains("黑色"){ print("Ok,我还喜欢这个颜色") }else{ print("黑色太沉重,不是我的菜") } //4.删除所有的元素 favoriteColorS.removeAll() print(favoriteColorS)

/*遍历Set 可以使用for-in,由于Set中元素是无序的可以先用sorted()方法返回Set的有序集合/ var colors:Set = ["white","red","black"] print("--无序Set") for color in colors { print(color) } print("--有序Set") for sortedcolor in colors.sorted() { print(sortedcolor) }

var numbers:Set = ["1","2","3"] for number in numbers { print(number) } for num in numbers.sorted() { print(num) }

/* Set之间的操作 如果把两个Set组合在一起,判断两个Set的共有元素、或者判断两个Set是否全包含、部分包含或者相交包含或者不相交 intersection(:)方法,根据两个Set中共同包含的中创建一个新的Set symmetricDifference(:)方法,根据包含于单个Set且不同时包含于两个Set中的值创建一个新的Set union(:)方法,根据两个Set包含的所有值创建一个新的Set subtracting(:)方法,根据a包含但b不包含的值创建一个新的Set / var a:Set = [1,2,3,4,5] let b:Set = [4,5,6,7,8] //1.intersection(:)方法 print(a.intersection(b).sorted()) //2.symmetricDifference(:)方法 print(a.symmetricDifference(b).sorted()) //3.union(:)方法 print(a.union(b).sorted()) //4.subtracting(:)方法 print(a.subtracting(b).sorted())

/* Set之间的操作 如果把两个Set组合在一起,判断两个Set的共有元素、或者判断两个Set是否全包含、部分包含或者相交包含或者不相交 intersection(:)方法,根据两个Set中共同包含的中创建一个新的Set symmetricDifference(:)方法,根据包含于单个Set且不同时包含于两个Set中的值创建一个新的Set union(:)方法,根据两个Set包含的所有值创建一个新的Set subtracting(:)方法,根据a包含但b不包含的值创建一个新的Set / var a:Set = [1,2,3,4,5] let b:Set = [4,5,6,7,8] //1.intersection(:)方法 print(a.intersection(b).sorted()) //2.symmetricDifference(:)方法 print(a.symmetricDifference(b).sorted()) //3.union(:)方法 print(a.union(b).sorted()) //4.subtracting(:)方法 print(a.subtracting(b).sorted())

/* Set之间的关系 指的是Set元素之间的关系,如果一个Set包含了另一个Set的所有元素,通常称前一个Set为后一个Set的父Set,后一个为前一个Set的子Set,两个Set的所有元素相同,通常说两个Set相等,两个Set没有共同元素时,彼此不关联。 1.是否相等运算符(==):判断两个Set的值是否全部相同 2.isSubset(of:)方法,判断一个Set中的值是否都被包含在另一个Set中 3.isSuperset(of:)方法,判断一个Set中是否包含另一个Set中的所有值 4.isStrictSubset(of:)方法,判断一个Set是否是另一个Set的子集合,并且两个Set不相等 5.isStrictSuperset(of:)方法,判断一个Set是否是另一个Set的父集合,并且两个Set不相等 6.isDisjoint(with_:)方法,判断两个Set是否不含有相同的值(是否有没有交集) /

let x:Set = [1,2,3,4,5] let y:Set = [1,2] let z:Set = [4,5,6,7,8] let m:Set = [1,2] print("y是x的子集",y.isSubset(of: x)) print("x是y的父集",x.isSuperset(of: y)) print("y和Z没有交集",y.isDisjoint(with: z)) print("y和m相等",y == m)

/** 字典 基本格式: let/var 名称:Dictionary = [key1:value,key2:value,key3:value]一个键值对是一个key值和一个value的结合体,键和值之间以冒号分割,这些键值对构成了一个列表,由方括号并以逗号分割

*/ var airports:Dictionary = ["TYO":"Tokyo","DUB":"Doubin"] //只能是型字典

var dict = ["name":"susan","age":18,"heigth":170] as [String : Any] dict["name"] = "xiaohua" //将name对应的值进行修改 dict["gender"] = "Girl" //增加一个键为gender的键值对 print(dict)

//字典的遍历 for (k,v) in dict { //遍历字典 print("(k)---(v)") }

//字典的合并 var dict1 = ["name":"小花","age":18] as [String : Any] var dict2 = ["title":"老大","name":"小草"] as [String : Any] //将dict2的内容合并到dict1中 for (k,v) in dict2{ dict1[k] = v } print(dict1) //如果合并过程中出现相同的键则,合并项中旧值会被覆盖

/* 比较Swift和Object-C的字典 1.Object-C中使用{}来定义一个字典,而Swift中仍使用[]来定义 2.在Object-C中有NSDictionary和NSMutableDictionary之分,而Swift中也是通过let/var来区分字典是否可变 3.与Object-C字典不同,Swift的字典不仅可以存储对象类型的值,还可以存储基本数据类型,结构体,枚举值。 4.Object-C中的NSDictionary是一个继承自NSObject基类的对象,而Swift中的字典是一个结构体 /

收藏
0
sina weixin mail 回到顶部