美文网首页iOS学习总结程序员iOS Developer
iOS基础--Swift基础知识总结1(变量,数组,字典,元组,

iOS基础--Swift基础知识总结1(变量,数组,字典,元组,

作者: 云之君兮鹏 | 来源:发表于2016-04-17 01:34 被阅读162次
    皮卡丘愿你开心.jpg

    常量和变量



    在Swift中使用 let 修饰一个常量, 使用 var 修饰一个变量;

    • let 修饰常量的值是不可以更改的
    • var修饰的变量的值是可以更改的;
    • 在声明常量和变量的时候可以用表情符号, 中文等命名常量名和变量名.

    //输出函数
    print("Hello, World!")

    // 定义一个常量

    // 方法 1:
    //定义之后,后面的值只能是字符串,因为指定了常量的类型
    let name:String = "詹姆斯"
    // 方法 2:
    //特性: 隐式类型推断,由初始值来推断常量的类型
    let gener = "男"

    • 使用let定义的常量的值永远不可以更改
    //定义一个变量的方式

    // 方式 1:
    var age = 100
    // 方式 2:

    var height : Int = 140` 
    - Swift 在定义一个变量或者常量的时候,必须要有确定的类型
    `leta :Int= 10
    let b : String = "James"
    let c : Character = "A" //字符使用双引号,但是只能放单个字符
    let d : Bool = false  // false 和 ture```
    
    字符串String
    
    有序的字符的集合 
    ####//创建一个字符串类型的常量
    `let string = "詹姆斯"`
    
    ####//创建一个值为空的字符串
    `let string1 = ""
    let string2 = String();`
    
    ####//字符串拼接
    `var name = "韦德"
    var newName : String = name + “520"`
    
    ####//获取字符串的长度
    `print(newName.characters.count)
    `
    ####// 运算符重载 当对两个字符串类型做加法操作时, 会自动拼接到一起
    
    ```code
    let q = "保罗"
    let w = "安东尼"
    let r = q + w```
    
    ####//Swift 不支持隐式类型转化
    
    ```code
    var age = 100
    let e = "Cobain's age is"
    let words = e + String(age)```
    
    ####//如果想要对两个不一样的数据类型的变量或者常量进行运算,需要使用这样的格式:
    ```code
    // 变量(常量) A +\-\*\/ 目标类型(B)
    var width = 100.2
    var f = width + Double(height)```
    
    ###数组
    > ####//定义空数组
    `var array3 = [String]()`
    ####//向数组中追加一个元素
    `array1.append(108)`
    ####//使用运算符重载 向数组中追加一个或多个元素
    `array1 += [502]`
    ####//在数组指定位置插入一个元素
    `array1.insert("科比", atIndex: 2)`
    ####//向数组指定位置插入 一个相同类型的集合数据
    `let array5 = ["麦迪", 52]
    array1.insertContentsOf(array5, at: 2)`
    ####//全部删除
    `array1.removeAll()`
    ####//全部删除 但保留内存
    array1.removeAll(keepCapacity: true)
    ####//删除第一个元素
    `array1.removeFirst()`
    ####//从第一个元素开始删除几个
    `array1.removeFirst(2)`
    ####//删除指定位置的元素
    `array1.removeAtIndex(2)`
    ####//删除最后一个元素
    `array1.removeLast()`
    ####//删除range范围的元素(包含起始索引,不包含终止索引)
    ```code
    let range : Range = Range.init(start: 1, end: 4)
    array1.removeRange(range)
    print("kiki\(array)")```
    
    ###字典
    
    >//定义一个字典
    ```code
    var dict = Dictionary<String, Int>()
    let dictionary = ["a" : 1, "b" : 2]```
    //当key的类型不一样时, key就为 NSObject类型
    ```code
    let dictionary1 = ["a" : 1, 2 : "b"]```
    //提前指定key和value的类型 创建一个字典
    ```code
    let dictionary2 : [Int : String] = [1 : "a", 2 : "b"]```
    //可以直接通过key值访问字典中的元素print(dictionary2[1])
    ```code
    var dictionary3 = ["詹姆斯" : "韦德", 102 : 522]
    dictionary3["韦德"] = "欧文"```
    //对一个不存在的key值进行操作, 即 插入一条数据
    ```code
    dictionary3["乐福"] = "love"```
    // 让某一个key值为nil 表示删除掉这个key和对应的value
    ```code
    dictionary3[102] = nil
    dictionary3.removeValueForKey("詹姆斯")```
    
    ###元组
    
    >- //元组是一个可以返回多个值的数据格式
    - //在Swift里面声明的时候使用"()"声明
    - //元组可以通过下标去访问元素, 也可以通过key值去访问元素
    - //整体的数据结构有点类似C语言里面的结构体
    
    
    >```code
    let type = ("东邪", ["西毒", "南帝"], "北丐", "伯通")
    print(type)
    print(type.0)```
    //定义数据类型
    ```code
    let type1 : (String, Int) = ("乔峰", 100)```
    //根据key值输出
    ```code
    let type2 : (name : String, age : Int) = type1
    print(type2.age)```
    
    --------------
    ###循环和分支:
    ---------------
    - **// for循环**
    ```code
    forvar i = 0; i < 100; i++ {
        print(i)}for (var i = 0; i < 100; i++){    print(i)
    }```
    
    - **// for in 循环遍历**
    // 1...10 表示全闭区间 [1,10]
    // 1..<10 表示半闭区间 [1,10)
    for i in 1...10 {    print(i)
    }
    
    ```code
    let animals = ["猪", "狗", "猫", "鸡"]
    for a in animals{    print(a)}
    let dict = ["东邪" : "黄药师", "西毒" : "欧阳锋"]
    for b in dict {    print(b)}
    for (key, value) in dict
     {    print("key : \(key) value : \(value)")
    }```
    - //while
    ```code
    var number = 0
    while number < 10 {    
    print(number)   
     number += 1
    }```
    
    - // repeat while 即C中的 do...while
    ```code
    var num = 0
    repeat {   
     print(num)    num += 1
    } 
    while num < 10```
    --------------
    ## //分支结构:
    ----------------
    ```code
      if 1==0 {   }```
    
    - // String? 在变量的类型后面加 ? , 表示这个变量为可选类型, 可以置为nil
    ```code
     var string : String? = "James"
    if (string != nil) {   }```
    
    - //在Swift里面, 每一个case里面自带一个 break
    ```code
    let age = 23
    switch age {
    case 1:
        print("age = 1")
        fallthrough  //贯穿 (不会break,而回继续走case 2)
    case 2:    
    print("age = 2")
    case 3:   
     print("age = 3")
    case 4:   
     print("age = 4")
    default :    
    print("age = 5")}```
    - //Swift中的switch可以根据区间去获取值
    
    ```code
    switch age {case 0...10:   
     print("一毛")
    case 11...20:    
    print("二毛")
    case 21...30:   
     print("三毛")
    default:    print("四毛")}
    var a = 5
    switch a
     {
    case var value where a < 10 && a > 0:    
              value += 1   
              print(value)
    default:    print("Other")}```
    
    - // Swift中的switch可以对一个元组做判断
    - // "_"表示忽略元组中这个位置的元素
    - // 条件齐全了,就可以不写default
    ```code
    let point = (10, 42)
    switch point 
    {
    case (10, 10):    print("第一象限")
    case (_, 10):    print("一,二 象限")
    case (10, _):    print("一, 四象限")
    case (_, _):    print("谁知道在哪")
    }```
    
    -------------
    ###函数
    ------------
    >无参无返回值
    无参有返回值
    有参无返回值
    有参有返回值
    无参有多个返回值
    有参有多个返回值
    inout函数
    
    - //func + 函数名 (参数列表) -> 返回值类型(无返回值可以以省略 -> Void) {}
    ```code
    func text() -> Void {    print("无参无返回值的函数")
    }
    text()
    
    • //无参有返回值
    func text1() -> String 
    {   
     return "无参有返回值"
    }
    let string = text1()
    print(string)```
    
    - //有参无返回值
    ```code
    func text2(name : String, age : Int)
     {    
    print("东邪是\(name), \(age)")
    }
    text2("黄药师", age : 100) ```
     // age : 外部参数名
    
    - //有参有返回值
    ```code
    func text3(name : String, age : Int) -> Array<NSObject> 
    {    
    let array : Array<NSObject> = [name, age]   
    return array
    }
    let array : [NSObject] = text3("孙悟空", age : 599)
    print(array)```
    
    - #####//函数的外部参数名第一个名字表示外部参数名, 当外界使用这个函数的时候使用的名字. 第二个参数表示内部参数名, 当函数里面使用这个参数的时候使用的名字, 外部函数可以用 _ 忽略掉
    ```code
    func text4(number myNumber : Int, name myName : String) 
    {    print("名字是\(myName), 编号是\(myNumber)")
    }
    text4(number: 101, name: "二狗蛋")```
    - //无参数有多个返回值的
    ```code
    func text5() -> (String, Int)
     {    return ("张三", 108)
    }
    let type = text5()
    print(type)```
    
    - //有参有多个返回值
    ```code
    func text6(name myName : NSString,age myAge : Int) -> (NSString, Int)
    {    return (myName, myAge)
    }
    let type2 = text6(name: "萌萌", age: 102)
    print(type2)```
    
    - //函数嵌套
    
    func text7()
     {   
    > func text()
     {        
    print("第一层嵌套函数")       
    >> func text2() 
    {            
    print("第二层")            
    >>>func text3()
     {
     print("第三层")  
     }  
      >>>> text3() 
     }      
    text2()    
    }    
    text()
    }
    
    text7();
    
    - //inout 函数
    - // Swift 中的参数 本身上是使用let定义的,即常量, 是不能更改的
    - // 如果参数 使用 inout 来修饰, 就成了输入输出参数,在函数内部修改参数,可以影响实参变量的值.
    ```code
    func text8(inout name : String) 
    {
        name = "艾弗森"
    }
    var name = "AI"
    text8(&name)
    print(name)```
    
    --------
    可选类型:
    -------
    -------
    //在swift中, 可选类型 ? 其根源是一个枚举型, 里面有None和Some两种类型.其实所谓的nil就是Optional.None, 非nil就是 Optional.Some
    //定义一个可选类型, 表示这个变量可以为nil
    `var intNumber : Int? = 100`
    //打印  打印出来是个Optional类型的值
    `print(intNumber)`
    //如果 要取到值 必须对可选类型 强制解包 !
    print(intNumber!)
    //可选类型分为有值和没值(nil) ,如果可选类型的变量值为nil(没值)时对其 强制解包,程序会崩溃
    
    //如果不确定可选类型是否有值时,用可选绑定, 不需要对可选类型解包
    ```code
    if var intNewNumber = intNumber 
    {    
    print(intNewNumber)
    }else{    
    print("error")
    }```
    
    --------
    结构体
    -------
    -------
    
    /\* Swift的结构体对比OC来说, 可以添加初始化方法, 可以遵守代理协议等 */
    ###//使用struct定义一个结构体
    ###//格式 : struct 结构体名字 { 结构体实现 }
    
    ```code
    struct Frame {    
    //存储属性 : 负责存储值的属性    
    var x : Float    
    var y : Float    
    var width : Float    
    var height : Float }```     
    ######//计算属性 : 负责将存储属性进行运算获得的值的属性    
    ######//get方法 : 在属性类型后面添加 {} 使用get关键字声明和实现get方法    //set方法 : 同上   
    ```code
     var centerX : Float
     {       
     set{           
           // set方法 不可以单独实现, 必须搭配着get方法        
          }        
     
     get{           
        //get方法 可以单独实现        
             return x + width/2        
         }    
     }      
     var centerY : Float
     {       
     get{            
          return y + height/2       
          }    
     }   ```
    // 结构体属性    
    `static var myStruct = "结构体属性, 只能通过结构体调用"    `   
    //结构体中可以声明和实现函数    
    
    ```code
    // 结构体属性
    func sayHi() 
    {       
        print("函数")
     }   ```    
    ####//init方法   
    ```code
    // 结构体属性
    init(x newX : Float, y newY : Float, width newWidth : Float, height newHeight : Float) {      
      x = newX        
      y = newY        
      width = newWidth        
      height = newWidth    } ```
      //结构体的类方法  
      // 结构体的类方法中只能调用结构体属性  
    ```code
      static func sayMy() 
    {        
        print(self.myStruct)    
    }   ```
    //属性作用 :
    //声明 _实例变量
    //声明和实现set方法
    //声明和实现get方法
    //结构体调用 (调用两个属性 )
    
        Frame.sayMy()
        print(Frame.myStruct)
    //创建一个对象的方式
    //方式 1:
    ```code
    var frame1 : Frame = Frame.init(x: 10, y: 10, width: 100, height: 100)```
    //方式 2: 自带的构造方法
    ```code
    var frame2 : Frame = Frame(x: 10, y: 10, width: 100, height: 100)```
    //对象调用属性
    `print(frame1.centerX)`
    //对象调用方法
    `frame1.sayHi()`
    
    

    相关文章

      网友评论

      本文标题:iOS基础--Swift基础知识总结1(变量,数组,字典,元组,

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