Swift字符串&数组&字典

字符串

字符串在任何的开发中使用都是非常频繁的

OC和Swift中字符串的区别

  1. 在OC中字符串类型时NSString,在Swift中字符串类型是String

  2. OC中字符串@””,Swift中字符串””

使用 String 的原因

  1.String 是一个结构体,性能更高

  2. NSString 是一个 OC 对象,性能略差

  3. String 支持直接遍历

  4. Swift 提供了 String 和 NSString 之间的无缝转换

定义不可变字符

let str = "hello world"

 遍历字符串

for c in str.characters {

print(c)

}

定义可变字符

var strM = "hello swift"

获取字符串的长度

先获取字符集合 在获取集合的count属性

let count = str.characters.count

字符串的拼接

let str3 = str + strM

字符串和其它数据类型的拼接

let name = "lwy"

let age = 18

//OC中是 NSString *info = [NSString stringWithFormat:@"my name is %@, age is %d", name, age];

let info = "my name is (name),age is (age)"

字符串的格式化 比如时间格式 想要把时间格式显示为 xx:xx

let min = 30

let second = 4

// swift中数组可以存储基本数据类型 字典也可以 但是在OC中不可以

// %0ad: a是一个数字, 表示如果数字位数不足a位的话, 数字前面加0, 补足a位, 如果超过a位, 则前面什么都不加;例如 %02d 表示的是如果数字不足两位的话前面补0 ,补足位两位 ,如果数字超过两位, 则什么都不补, %03d表示不足3位的话前面补0 ,补足为3位

let time = String(format:"%03d:%02d", arguments:[min,second])

字符串的截取

Swift中提供了特殊的截取方式 该方式非常麻烦 Index创建较为麻烦 简单的方式是将String转成NSString来使用 在标识符后加:as NSString即可

let urlString = "www.baidu.com"

//把urlString转为NSString再截取字符串 截取之后的字符串是String类型 不是NSString

let header = (urlString as NSString).substring(to: 3)//截取www字符串

let middle = (urlString as NSString).substring(with: NSMakeRange(4, 5))//截取baidu字符串

let footer = (urlString as NSString).substring(from: 10)

swift截取方式

let headerIndex = urlString.index(urlString.startIndex, offsetBy: 3)

let header2 = urlString.substring(to: headerIndex)

let footerIndex = urlString.index(urlString.endIndex, offsetBy: -3)

let footer2 = urlString.substring(from: footerIndex)

let startIndex = urlString.index(urlString.startIndex, offsetBy: 4)

let endIndex = urlString.index(urlString.startIndex, offsetBy: 9)

let range2 = Range(startIndex..

let middle2 = urlString.substring(with: range2)



数组

数组(Array)是一串有序的由相同类型元素构成的集合,数组中的集合元素是有序的,可以重复出现, swift数组类型是Array,是一个泛型集合 必须告诉数组存放的是什么类型

数组的定义

定义不可变数组 let修饰的数组就是不可变数组

let array = ["lwy","zym","rx"]// 点击alt键可以看到他的类型是 array:[String]类型 所以也可以写成这样

let arr :[String] = ["132"]

定义存放any类型的不可变数组

let arrayAny :[Any] = ["123","456",18,20]

或者

let arrAny = ["132","123",30] as [Any]

定义可变数组

OC中是[NSMutableArray array];方式创建的, 在swift中创建对象的方式是: 类型() 的形式创建, 比如UIView() 创建一个view,可以得出数组的话应该是 var arrM = Array()创建, 但是会发现这样写的话是会报错的, 因为数组是一个泛型集合, 必须告诉数组应该存放什么样的类型

//var arrM = Array() 错误的写法

var arrayM = Array() // 正确的写法 定义一个存放字符类型的可变数组 不过很少用到

var arrM =String// 这种写法比较多一些 定义存放any类型的可变数组 var arrayMAny =Any

数组的操作

增加元素

arrayM.append("lwy")

arrayM.append("zhangsan")

arrayM.append("lisi")

arrayM.append("wangwu")

arrayM.append("zhouliu")

arrayM.append("shengqi")

修改元素 直接赋值给相应的下标

arrayM[0] = "wangwu"

arrayM

删除元素 会返回删除的数据

let one = arrayM.remove(at: 1)

arrayM

let last = arrayM.removeLast()

获取某个下标的元素

arrayM[0]

array[0]

遍历数组

1.需要用到下标

for i in 0..

print(arrayM[i])

}

2.不需要用到下标

for name in arrayM {

print(name)

}

3.不常见的 比如 只是想遍历数组中的前两个元素

for i in 0..<2 {

print(arrayM[i])

}

或者

for name in arrayM[0..<2] {

print(name)

}

遍历数组的同时获取下标值

let names = ["why", "yz", "lnj", "lmj"]

for (index, name) in names.enumerated() {

print(index)

print(name)

}

数组的合并

比如想把array不可变数组和arrayM数组合并在一块 如果用OC的方法的话应该是这样的

for name in array {

arrayM.append(name)

}

swift的话可以直接相加

let result = arrayM + array

不过需要注意的是只有两个数组的类型是完全一样的时候才可以相加合并 不同类型的话是不能相加合并的 比如一个数组中存放的是数字 另一个数组存放的是字符 这时候这两个数组是不能相加的

不建议一个数组中存放多种类型的数据

var array3 :[Any] = [2, 3, "why"]

var array4 :[Any] = ["yz", 23]

array3 + array4


字典 

跟OC中一样 都是无序的,字典允许按照某个键来访问元素

字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合

键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的

Swift字典类型是Dictionary,也是一个泛型集合

定义一个不可变字典

let dict1 : [String : Any] = ["name" : "why", "age" : 18]

可以理解为转换为String:Any类型的字典

let dict2 = ["name":"lwy","age":18] as [String : Any]

定义可变字典

var dictM =String : Any

可变字典的操作

增加元素

dictM["name"] = "lwy"

dictM["age"] = 18

dictM["height"] = 170.0

dictM

删除数据 会返回删除的value

let nameValue = dictM.removeValue(forKey: "height")

dictM

修改数据

dictM["name"] = "yw"

或者

dictM.updateValue("yu", forKey: "name")

可以看到修改数据和增加数据的方法是一样的 也就是当我们修改一个不存在的key的数据时 就会增加一个相应key的数据


查询字典

dictM["name"]

字典的遍历

遍历所有的值

for value in dict1.values {

print(value)

}

遍历所有的key

for key in dict1.keys {

print(key)

}

遍历所有的键值对

for (key, value) in dict1 {

print(key)

print(value)

}

字典的合并

var dictM1 = ["name":"lwy","age":20] as [String : Any]

var dictM2 : [String : Any] = ["height":18 ,"phoneNum":"10086"]

字典的合并不能像数组那样直接相加合并 即使字典的类型完全一致也不可以相加

dictM1 + dictM2 dictM1和dictM2是完全一样的类型 但是也不能相加 这样是错误的

for (key, value) in dictM1 {

dictM2[key] = value

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容