初次相遇---Swift

 1 . swift简介

1.1   在swift当中没有main函数的概念。swift没有 .h 和 .m 文件,一个类只用.swift来表示。

        在swift当中可以不写分号。但如果一行当中有多条语句的时候,分号就必须写。

        在swift当中采用 print函数来代替NSLog函数打印数据,而且苹果建议我们这样,print函数效率比   NSLog要高.在print函数里面没有占位符的概念,如果要插入参数采用 \ ( )。

 1.2  在swift当中变量和常量分别用var/let表示。

        格式:let/var 名字 = 初始值。

         在swift当中不用明确的指出变量和常量的类型,XCode会根据你的初值自行推导出具体类型            (Optional + Click )

2 swift中常用的数据类型

 2.1  swift不存在隐式转换,不同数据类型不能做运算,做运算之前必须进行强制类型转换

         格式:let/var名字:数据类型 = 初始值

         //swift整型和双精度浮点型相加,就需要强转一下

         let a1:Int = 2

         var a2:Double = 2.32

         let b = a1 + Int(a2)

         print("b")

        //bool布尔值只能用  true  or    false

         let a3:Bool = true     

         print("a3 = \(a3)"))

        //字符类型采用character 并且双引号赋值

        let a4:Character = "a"

       //在swift中采用String 表示一个字符串,双引号赋值,不是一个对象,是一个结构体

        var a5:String = "海贼-女帝"

       // swift   ??->空运算标示符

          ?? -->如果可选类型值不为空的话,会帮我们进行强制解包之后参与运算,如果为nil的话则提供一个默认值给我们

        var value:Int?

       let value1 = (value ?? 5) + 20

       print("value1 = \(value1)")

2.2   字符串

        var str = "hello"

        1.长度

        print("长度 = \(str.characters.count)")     

        2.拼接字符串采用+=  拼接字符append函数

        var str1 = "world" 

         str += str1

         print("str = \(str)")

         let c:Character = "c"

        str.append(c)

        print("str = \(str)")

      //是否相等 ==    

       if(str1 == "world"){

       print("相等")

       }

       //前缀相等

       if(str1.hasPrefix("wo")){

       print("前缀是wo")

       }

      //后缀

      if(str1.hasSuffix("ld")) {

        print("后缀是ld")

       }

      //大小写转换

       print("str1的大写\(str1.uppercaseString)")

       let str2 = "2331THJF" 

       print("str1的大写\(str2.lowercaseString)")

      //字符串String 支持遍历

      for item in str.characters{

       print(item)

      }

      //swift里面的字符串跟OC字符串可以互相转换

       let str4 = str1 as NSString 

2.3 数组

       在swift中数组类型是Array,创建一个数组或者字典必须明确的指出数组里面元素类型

       跟OC里面NSArray可以互相转换

       var array1:[String] = ["123","456","356"]

       //增加元素

       array1.append("888")

       print(array1)

       //删除

       array1.removeAll(keepCapacity: true) 

      //遍历分两种:普通遍历和云组遍历

      //普通遍历

       for item in array1{

       print(item)

       }

      //云组遍历  //enumerate(array)Xcode 2.2之前的写法

       for(index, value)in array1.enumerate() {

      print("index = \(index),value = \(value))")

      }

      //数组个数 :array1.count

2.4 字典

       var dict0:[String:AnyObject] = ["1":"a", "2":"v", "3":"c"]

       var dict1:[String:AnyObject] = ["4":"a", "5":"v", "6":"c"]

      //增加和更新元素

       dict0["4"] = "r"  //如何key 存在就是一个更新操作,如果不存在就是一个增加操作

       print(dict0)

      //移除元素

      dict0.removeAtIndex(dict0.indexForKey("4")!)

      dict0.removeValueForKey("1")

      print(dict0)

      //遍历

      for item in dict0{

      print(item)

       }

      for(index,value)in dict0.enumerate(){

      print("index = \(index),value = \(value)")

      }

      //合并两个字典

      for item in dict0.keys{

      dict1[item] = dict0[item]

      }

2.5 可选类型

       概念:如果一个值可能有值,也可能为空,那么这个常量/变量就是一个可选类型.可选类型用?标示出来

       如果打印数据被Optional字样包含的话说明打印了一个可选类型

       可选类型不能直接参与运算,参与运算之前必须强制解包!标示

       警告:在对一个可选类型进行强制解包之前必须确认这个可选类型不能为nil

       错误类型error  :unexpectedly found nil while unwrapping an Optional value   说明对nil 强制解包

       在模型里面所有的基本数据类型不可以为可选类型,否则的话在字典转模型的话找不到这个key。给默认值0

2.6 枚举

   swift 一个枚举成员不局限于关联整形数据,也没有默认值

   如果枚举关联的是一个整形数据的话,后面的枚举值会根据前面进行累加

   如果枚举关联的是一个非整形数据,必须给出所有的枚举关联值 

   如果一个枚举类型已经指定的话,下次赋值的时候可以通过(.)进行赋值,省略前面的

   获取枚举成员关联的默认值 .rawValue

     enum Month:String {

      //两种赋值方式

      //case January,February,Match

      case January = "一月"

     case February = "二月"

     case Match = "三月"

     }

     var month = Month.January

      print("month1 = \(month.rawValue)")

      month = .Match

      print("month1 = \(month.hashValue)")

2.7 控制流

    1.if后面的小括号可以省略,大括号不能省略

    2.swift中if后面的条件语句没有“非0即真”的概念

    let a = 10

    if(a > 0){

    print("a > 0") 

    }

    2.可选类型的判断 if - let

       if - let:先判断可选类型是否为空,不为空创建一个局部变量接收此时可选类型的值,再执行代码块,否则不执行代码块

       let a:Int? = 10

      if let b = a{

      print("b = \(b)")

      }

      if-let-where      where是对定义出来的常量再做一层判断

      if let c = a where c > 5{

      print("a > 5")

      }

       guard 守护     是判断可选类型是否有值,没值的话执行else里面的代码块,有值的话不执行代码块,在下面执行

      //定义一个函数

      func demo(){

      var a:Int? = 12

     guard let d = a else  {

      print("a = nil") 

      return 

       } 

       print("d = \(d)")

      }

       //调用函数

      demo()

2.8 switch

     //switch

    //switch 后面的小括号可以省略

    //case 后面的break 可以不写,不会造成穿透的效果

    //默认default必须添加,而且只能加在最后面

    //case后面至少有一条执行语句,case后面的大括号可以省略不写

    //switch不再像OC那样只局限于整形的选择

    let a = 10

    switch a

    {

    case 2:

    print("a = 2")

    case 3 :

    print("a = 3")

    case 10:

    print("a = 10")

    print("a = 10")

    default :

    print("a = nil")

    }

    //switch不再像OC一样只局限于整形、浮点型、字符串等

    let score = "优"

    switch score

    {  

    case "优":

    print("a = 2")

    case "良":

    print("a = 3") 

    case "差": 

    print("a = 10")

    default :

    print("a = o")

     }

2.9  循环

        //写法一

        //for()在swift2.2后面就废弃了

       for var i = 0;i < 10;i++

       {

        print(i)

        }

       //写法二(闭区间)

      for i in 0...10 {

       print(i)  

      }

       //[0,10)开区间

       for i in 0..<10

       {

        print(i)

       }

   //while 

      var i = 10

      while i > 1

      {

      print(i)

      i--

      }

     //do-while不存在,取代的是repeat-while

     var i = 10

    repeat{

    print(i)

    i--

    }while i > 5

你可能感兴趣的:(初次相遇---Swift)