Swift初探(一)

作者: 相关函数 | 来源:发表于2016-02-29 19:34 被阅读505次

    常量和变量

    常量

    使用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支持运算符的重载

    变量

    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.在某个位置单独的插入一条数据

    在下标为3的位置插入一个整型数据5

    array.insert(5, atIndex: 3)

    2.在某个位置插入一个新的数组

    在下标为0处插入一个数组

    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一样,轻便,快速...

    相关文章

      网友评论

        本文标题:Swift初探(一)

        本文链接:https://www.haomeiwen.com/subject/yxugkttx.html