一、字符串
在OC中字符串类型时NSString,在Swift中字符串类型是String
OC中字符串@””,Swift中字符串””
1 | 使用 String 的原因 |
遍历字符串
1 | // 字符串遍历 |
字符串拼接
1 | 两个字符串的拼接 |
字符串的截取
1 | Swift中提供了特殊的截取方式 |
字符串的判断
1 | //与oc方法的 isEqualToString方法一样 |
ASC 值进行比较
1 | let s1 = "abc" |
二、数组
数组(Array)是一串有序的由相同类型元素构成的集合
数组分成:可变数组和不可变数组
- 使用let修饰的数组是不可变数组
- 使用var修饰的数组是可变数组
1 | // 定义一个不可变数组 |
对数组的基本操作
1 | // 添加数据 |
数组的遍历
1 | // 遍历数组 |
数组的合并
1 | // 数组合并 |
Swift中关于数组的 Sorted、forEach、 Map,Flatmap,Filter,Reduce的用法
简化参数名,如$0,$1(从0开始,表示第i个参数…)
Sorted
1
2
3
4
5
6
7
8
9
10
11
12
13/*
数组提供了一个排序函数,sorted().使用的是默认规则,当然我们也可以定制排序规则。
*/
let names = ["ZZZZZZ", "BB", "A", "CCCC", "EEEEE"]
names.sorted()
// ["A", "BB", "CCCC", "EEEEE", "ZZZZZZ"]
//更改排序规则 其实就是利用了函数重载,具体可看函数定义
//sorted(by: <#T##(String, String) throws -> Bool#>)
names.sorted {
$0.count > $1.count
}
// ["ZZZZZZ", "EEEEE", "CCCC", "BB", "A"]forEach
1
2
3
4
5/* 循环遍历集合中的元素,相当于for-in 快速遍历 */
let values = [5, 3, 2, 3,1]
values.forEach {
print("element is \($0)")
}Map
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27在OC中,对数组元素的操作是很不方便的一件事,遍历,操作,赋值给新数组,显得太繁琐。
在swift中,对数组的操作就简洁了很多。
map方法作用是把数组[T]通过闭包函数把每一个数组中的元素变成U类型的值,最后组成数组[U]
+将示例数组,每个数字都加10,获得一个新的数组:
//map函数里面可以直接使用函数作为参数,这里采用函数的方式。
let numberArray = [1,2,3,4,5]
func fmap(a : Int) -> Int{
return a + 10
}
var result = numberArray.map(fmap)
print(result)
//采用闭包的方式
var result = numberArray.map({($0) + 10})
print(result)
+ map不只是可以用来做简单的数值运算,还可以处理一些其他复杂操作,如:在数字后拼接字符串,返回新的数组
用常规方式写:
for number in numberArray {
stringsArray.append("\(number)只")
}
print(stringsArray)
使用map:
resultArray = numberArray.map({"\($0)只"})
print(resultArray)FlatMap
1
2
3
4
5flatMap 更加强大,可以传入N个处理方法,将处理后得到数据,组合到同一个数组中
resultArray = numberArray.flatMap({["\($0)个","\($0 )只"]})
print(resultArray)
//输出结果:
["1个", "1只", "2个", "2只", "3个", "3只", "4个", "4只", "5个", "5只"]Filter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17filter就是筛选的功能,参数是一个用来判断是否筛除的筛选闭包,
根据闭包函数返回的Bool值来过滤值。为True则加入到结果数组中。
+ 找出数组中大于2的数
常规方式实现:
var filteredArray : [Int] = []
for number in numberArray {
if number > 2 {
filteredArray.append(number)
}
}
print(filteredArray)
使用filter实现:
filteredArray = numberArray.filter({$0 > 2})
print(filteredArray)reduce
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21reduce的作用给定一个类型为U的初始值,
把数组[T]中每一个元素传入到combine的闭包函数里面,通过计算得到最终类型为U的结果值。
+计算数组中所有数字的和,积
常规方式实现:
var sum = 0
for number in numberArray {
sum += number
}
print(sum)
var product = 1
for number in numberArray {
product = product * number
}
print(product)
使用reduce实现:
sum = numberArray.reduce(0, combine: {$0 + $1})
print(sum)
三、字典
字典允许按照某个键来访问元素
字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合
键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的
Swift字典类型是Dictionary,也是一个泛型集合。
字典的初始化
- 使用let修饰的数组是不可变字典
- 使用var修饰的数组是可变字典
1 | // 定义一个不可变字典 |
字典的基本操作
1 | // 添加数据 |
字典的遍历
1 | // 遍历字典中所有的值 |
字典的合并
1 | // 字典的合并 |
四、方法的书写
方法调用 闭包中必须使用 self,类中使用时不必加self
1 | func 函数名(形参列表) -> 返回值类型 { |
有参数、无返回值:
1 | func switchMethod(a:Int) -> (){ |
无参数、有一个返回值:
1 | func backCountValue() -> String { |
无参数、有二个返回值:
1 | func getNume()->(a:Int,b:Int) |
有若干个不确定的参数、有一个返回值:
1 | //写一个可变参数的函数只需要在声明参数时在类型后面加上 ... 就可以了 |
函数的外部参数
1 | //外部参数 width是提供给调用方来进行使用的,方便调用方明白函数里面参数的具体意思 |
五、访问修饰符
在Swift语言中,目前有五种修饰符,有 open public internal fileprivate private 这五个访问权限,都可以修饰属性和方法。
1 | 1、private |
5种修饰符访问权限排序
open>public>internal>fileprivate>private