常量和变量
常量
使用let定义一个常量,定义完成之后不能重新赋值.
使用let定义的常量其内存地址是不可变的
Swift支持隐式类型推断,可以根据初值,自动判断Swift的数据类型
let a = 10
let b: String = "Hello"
let c = 20.1
Swift不支持隐式类型转换, 不能让两个不一样的数据类型做四则运算.所以我们需要进行强转
Swift强转的格式: 数据类型(需要强转的数据)
let d = Double(a) + c
在Swift中可以使用汉字或者emoji表情作为数据名
let 哈哈 = "嘿嘿嘿"
let 😊 = "笑"
Swift支持运算符的重载,它会根据环境自动判断运算符的含义
let haha = "哈哈"
let heihei = "嘿嘿"
let hengheng = haha + heihei
变量
Swift中使用var来定义一个变量
var a = 11
a = 100
定义一个nil变量
如果我们需要定义一个初值为nil的变量, 格式为: var + 变量名 + ":" +变量类型? = nil
通常使用"?"来进行拆包操作...
var b: String? = nil
复杂数据类型
数组
在Swift数组里面的数据类型必须是一样的
let array = [1, 2, 3, "a"]
以上代码在Swift中是anyObject类型,也就是任意类型的.在Swift2.0中是NSObject类型的.这是数组初始化的一种方式,直接在"[]"中添加元素
数组初始化的第二种方式,在创建的时候先指定数据类型
let array1: [Int] = [1, 2, 4]
数组初始化的第三种方式, 定义一个空的数组
let array2: [Int] = []
对数组的操作 (增 删 改 查)
先定义一个数组,首先他应该是一个var定义的变量
var array = [1, 2, 3, 4, 5]
数组的增
1.在某个位置单独的插入一条数据
array.insert(5, atIndex: 3)
2.在某个位置插入一个新的数组
array.insertContentsOf([111, 222, 555], at: 0)
数组的删
1.删除全部的元素
array.removeAll()
2.删除全部的元素,但是保留数组的空间
array.removeAll(keepCapacity: Bool)
在这里注意bool值跟OC中的是不同的,在OC中Bool类型只是一个typedef,指定非零即真,而在Swift中Bool是一个枚举,指定ture为真,falue为假
3.删除指定下标处的元素
array.removeAtIndex(index: Int)
4.删除一个区间的元素
let range: Range = Range(start: 1, end: 3)
array.removeRange(range)
5.删除一个区间的元素
其他的操作就是删除首位元素,末位元素以及从首位到某位元素
数组的改
可以通过数组下标进行改变数组的值
我们可以使用运算符的重载进行数组的拼接
var array1 = [6, 7, 8, 9, 10]
var array2 = [11, 12, 123]
var array3 = array1 + array2
字典
创建字典的两种方式
第一种
let dictionary = [1: 2, 3: 4, "a": "b"]
这种方式在Swift1.0中是不存在的
第二种
在Swift的字典中, 所有的key 所有的value都必须是同一类型的
let dictionary1: [String: Int] = ["a": 1, "b": 2]
对字典的操作
字典的增
首先定义一个字典
var dictionary = [1: 2, 3: 4, 5: 6]
对字典中不存在的key赋值其实就是对字典做增加的操作
dictionary[7] = 8
字典的删
字典的删跟数组很象 就不详细介绍
根据key值删除元素
dictionary.removeValueForKey(1)
可以通过给字典key对应的value值赋空来删除元素
dictionary[3] = nil
元组
元组是Swift中不同于OC的一点,
我们使用() 来表示一个元组, 元组中是没有具体的数据类型的概念的
定义一个元组
let type = ("悟空", "XZ")
访问元组
1.通过下标访问
直接使用点语法点出元组的下标
2.通过名字
我们定义元组的时候可以指定其中元素的名称
let type1: (name: String, nickNmae: String) = type
结构
循环结构
for循环
遍历数组 可以省略掉括号
let array = [1, 2, 3, 4, 5]
for var i = 0; i < array.count; i++ {
print(array[i])
}
while循环
var i = 0
while i < array.count {
print(array[i])
i++
}
repeat...while循环
repeat{
print(i)
i++
}while i < 10
在Swift中repeat...while和C OC的do...while是一样的. Swift1.0版本的时候交do while, Swift2.0版本叫repeat while
for in 循环
let array = [1, 2, 3, 6, 8]
for var a in array {
print(a)
}
分支结构
if else
var timer: String? = nil
if timer != nil {
print("yes")
}else{
print("no")
}
在 if else 判断的条件中不能填 timer ,在Swift中Bool是一个枚举,指定ture为真,falue为假
switch...case
let value = 10
switch value {
case 0:
print(value)
case 1:
print("a")
default:
print("55555")
}
在Swift中的不需要break来跳出switch...case,因为在case中就已经存在break,但是如果不能满足全部的条件,则必须写default
在Swift中的switch...case可以在case中写一个条件.或者区间,我们使用"..."来表示闭区间,使用"..<"表示开区间
let value = 10
switch value {
case 0...10:
print(value)
case 11 ..< 20:
print("v")
default:
print("vvvv")
}
当然我们也可以用它来判断一个元组,
let point = (10, 10)
switch point {
case (10, 10):
print(point)
case (_, 10):
print(point.1)
case (10, _):
print(point,0)
case (_, _):
print("哈哈哈")
}
在上面我们使用"_"来表示这个位置没有值,并且他的条件已经完全包含了,所以我们不用写default
其实上面我们已经提到case可以是一个条件
let value = 0
let value1 = 100
switch value {
case 0 where value1 < 10:
print(value)
case 0 where value1 > 10:
print(value1)
default:
print("...")
}
上面代码很好的诠释了这句话,当我们判断case已经找到对应值,还必须满足where的条件
函数
在Swift中存在的函数种类: 无参无返回值 无参有返回值(单个返回值, 多个返回值) 有参无返回值 有参有返回值(单个返回值, 多个返回值)inout函数 嵌套函数.
函数的定义是:
func(关键字) test(函数名) "()"(参数列表) -> Void(返回值类型) {
函数体
}
无参无返回值
func test() ->Void {
print("one");
}
// 调用函数
test()
但函数没有返回值的时候,可以省略"-> Void"
无参有返回值
// 返回字符串
func test1() ->String {
return "two"
}
print(test1())
// 返回数组
func test2() ->Array<Int> {
return [1, 2, 3]
}
print(test2())
// 返回OC中的数组
func test3() ->NSArray {
return [1, 3, "a", "m"]
}
print(test3())
上面返回数组是"<>"表示数组中元素的类型
有参无返回值
// 因为是无返回值,故省略了 -> Void
func test4(number: Array<Int>) {
print("电话: \(number)")
}
test4([1, 1, 0])
有参有单个返回值
func test5 (age: Int) ->String {
return "年龄是\(age)"
}
print(test5(666))
无参有多个返回值
func test6 () -> (String, String, Int) {
return ("a", "b", 6)
}
print(test6())
有参有多个返回值
func test7 (hello: Int, world: String) ->(Int, String) {
return (hello, world)
}
print(test7(6, world: "6"))
其实在Swift中有多个返回值就是返回一个元组,元组中的元素我们可以使用点语法,点元素的下标来访问.
inout函数
func test8 (inout number: Int) {
number = 100
}
var a = 5
test8(&a)
print(a)
inout函数可以讲外界的数据传进函数在传出来 在外界使用,这就是inout函数的用法,我们可以使用它进行外界数据与函数中数据的交换
函数嵌套
Swift是支持函数嵌套的,一层一层可以无限嵌套下去
// 第一层
func test10() {
// 第二层
func test11() {
// 第三层
func test12() {
// 第...层
// ...可以无限定义下去
}
}
}
Last
Swift和Storyboard是乔帮主留给我们两个财富,而Swift是一门充满魅力的语言.就像他的名字和logo一样,轻便,快速...