swift学习

一:基本知识点

       1:类型标注

        var welcomeMessage:String前面为定义的变量名,后面为类型.注意:swift中不要求为每一条语句添加分号,如果把多行放到一个物理行,那就必须添加分号.如下:

       let mystring = "Hello World";println(mystring) 打印为 Hello World

        

        2:类型别名表示为已经存在的类型定义一个别名,其关键字为typealias.

       typealias age = UInt8

       var myAge:age =1

       println(myAge)

        

        3布尔类型 swift为布尔类型提供了2个常量值来表示,分别是truefalse

       let isPassWordCorrect = false

       let areYouAChinese = true

       if isPassWordCorrect{

           println("欢迎登陆!")

        }else{

           println("对不起,登陆失败!")

        }

        

        4字符串的创建和初始化

       var emptyString = ""  用空支付字面量,创建一个空的字符串

       var anothrtEmptyString = String()   使用构造器,创建一个空字符串

       if emptyString.isEmpty{

        println("空字符串!")

        }

        

        5字符串和字符的连接可以使用+ 或者+=来连接2个不同的字符串.也可以使用 String append方法

       let string1 = "Hello"

       let string2 = " there"

       var welcome = string1 + string2

       println(welcome)  打印为:Hello there

        

       var instruction = "look over"

        instruction += string2  对象必须定义成var才可以进行赋值

       println(instruction)   打印为:look over there


       let mark:Character ="!"

        welcome.append(mark)

       println(welcome)   打印为:Hello there!

        

        6字符串内插使用\()来构建一个新的字符串括号中放置内插的表达式,常量,变量或者字面量值.

       let stringValue = "hello, boy!"

       println("\(stringValue)"打印为: hello, boy!

        

        7元组 swift使用元组来归类多个具有任意类型的相关联的值.

       let http404Error = (404,"Not Found"该元组的类型为(Int,String)

       let (statusCode, statusMessage) = http404Error

     

       println("状态码为\(statusCode)")   获取元组中的值. 状态码为 404

       println("状态信息\(statusMessage)")   状态信息 Not Found

       println("状态码为\(http404Error.0)"通过下标获取对应数据

        

        也可以通过给元组里面的数据取名的方式来解绑里面的数据

       let http200Status = (statusCode :200 , statusMessage :"ok")

       println("状态码为\(http200Status.statusCode) 状态信息\(http200Status.statusMessage)"状态码为 200 状态信息 ok

        

        8可选类型可选类型的引入主要是解决有何无的问题.可以通过可选类型来声明变量或者常量,如果我们定义了一个常量或者变量但是忘记了初始化,swift将会自动把改可选类型的值设置为nil.

       let optionalInt: Int? =866

       var optionalString: String? = "How are you!"

        记住:一旦确定可选类型里面有值,我们就可以在Optinal类型变量或常量后加叹号(!)来强制使用Optinal类型里面的值.

        println("\(optionalInt)\(optionalString)"打印 Optional(866) Optional("How are you!")

        println("\(optionalInt!)\(optionalString!)"打印  866 How are you! 这里是隐式解析可选类型确定器有值.

        

        

         9数组 数组类型的写法Array<String> [String] 表示数组类的数据类型String类型

       var shoppingList : Array<String> = ["swift","oc"]

       var shoppingArray : [String] = ["egg","milk"]

       var shoppingArr = ["boy","girl",123,true]

        

        注意:1)如果我们在定义数组时显示的指定了数组中的数据类型,则该数组中必须统一存放该类型的值,存放其他类型的值会报出编译时错误.2)如果我们定义数组时不指定数组的数据类型,则该数组默认为AnyObject类型.

       for item in shoppingList{

          println("\(item)")

        }


       var someInts = [Int]()  创建一个空数组

       var nameOfInterger = [Int:String]()  创建一个空字典

        

       10 结构体 定义格式 sturct 名称:协议...{属性和方法}

       struct Sword {

           var width: Float

           var name: String

           func description(){

             println("这是一把名为\(name)的剑,身长\(width)")

            }

        }

        

       var sword : Sword =Sword(width: 1.5, name:"龙泉"成员构造方法,初始化 SWord这个结构体实例.

        sword.description()这是一把名为龙泉的剑,身长1.5.点语法访问内部属性.

        

        11枚举类型 枚举用来存储一组相关数据的通用类型.

       enum Paltform{

           case Windows

           case Linux

           case Macos

        }

       也可以这样声明

       enum Paltform1{

          case Window,Linux,Macox

        }

       注意: swift 中的枚举成员的值就是本身,:Platform.Windows.

       var myPlatform = Paltform.Windows

       switch myPlatform{

         case .Windows:

            println("这是Windows平台")

         case .Linux:

            println("这是Linux平台")

         case .Macos:

            println("这是Macos平台")

            

        }

        

        12区间运算符闭区间(...) 比如: a...b 意思是ab并且包含b在内半开区间 比如: a..<b ab但不包括b在内.

       for index in10...15{

         println("\(index)")

        }

       /*

        10

        11

        12

        13

        14

        15

        */

       for index in10..<15{

         println("\(index)")

        }

       /*

        10

        11

        12

        13

        14

        */

        

       13 switch中的case专题

       13.1 case支持简单字面量

       var cardOwenerQueue = ["大陆同行证","台湾同行证","香港通行证","美国通行证"]

       var cardType = "大陆同行证"

       switch cardType{

         

           case "大陆同行证":

                 println("请去1号柜台办理!")

           case "台湾同行证":

                 println("请去2号柜台办理!")

           case "香港通行证":

                 println("请去3号柜台办理!")

           case "美国通行证":

                 println("请去4号柜台办理!")

           default:

                 println("对不起,暂时不支持此证办理!")

        }

        

       13.2 case支持元组

       var students = ("重邮",2007)

        

       switch students{

          

       case ("北大",2007):

           println("天之骄子的一代!")

       case ("重邮",2007):

           println("就业率最高的一代!")

       case ("清华",2007):

           println("拔尖的一代!")

       default:

           println("务实的一代!")

        }

        

       13.3 case支持区间操作

       var enemyPosition = 55

        

       switch enemyPosition{

          

       case 0...15,65...100:

           println("第一区域!")

       case 45...65:

           println("第二区域!")

       default:

           println("第三区域!")

        }

        

       13.4 case支持绑定和条件绑定

       var enemyPositionTwo = (54,54)

        

       switch enemyPositionTwo{

             case let (x,55): println("敌人进入警戒区域,暂时未动,当前坐标为[\(x):55]")

             case let (x, y)where x == y: println("敌人进入水域")//敌人进入水域

             case let (x, y)where x < 45 && x >35: println("敌人很嚣张")

             default:println("小心谨慎")

        

        }

        

        case后面let (x, y)形式叫做值绑定,caselet (x, y) where x == y条件绑定.从下面开始另外写一遍博客文章.

        

        14函数

       func sayHello(personName:String) ->String{

           let greeting = "你好," + personName +"!"

           return greeting

        }

        

       println(sayHello("老码"))

        

        定义函数的时候可以在内部参数名称前定义外部参数,并使用空格分隔.好比如:

       func creatFamily(motherName: String, fatherName : String, babyName: String) ->String{

         return "妈妈是" + motherName +",爸爸是" + fatherName +"他们的宝宝是" + babyName

        }

        

       调用函数

        println(creatFamily("Jenna","Eyang","Yoyo") )

        

        对比一下 #机制表示内部参数名也可以作为外部参数名

       func creatFamily1(#motherName: String,#fatherName : String, #babyName:String) ->String{        return "妈妈是" + motherName +",爸爸是" + fatherName +"他们的宝宝是" + babyName

        }

        

         调用函数这样参数名称意思清楚很多.

        println(creatFamily1(motherName:"Jenna", fatherName: "Eyang", babyName: "Yoyo"))

        

        

       14.2 可变参数

       func sum(numbers: Int...) ->Int{

           var total: Int =0

           for number in numbers{

             total += number

            }

           return total

        }

        上面sum函数的定义提供在参数列表后面加...的方式来定义可变参数.调用这个函数的时候,我们可以根据自己的需求传入多个参数.

         println( sum(1,2,3,4,5,6,7))结果28

        

        注意:1传入可变参数的值在函数体内被当做该参数的一个数组.2一个函数至多只能够有一个可变参数.3可变参数必须放在参数列表的最后.如果可变参数放在参数列表的中间,谁知道哪个值是最后一个传入的参数呢?系统完全无法做出判断.因此小伙伴切记可变参数必须放在函数列表的最后.

        

        

        

        14.3默认参数 就是在函数定义的时候给参数列表里面的几个或全部参数赋默认值.被赋予的默认值的参数可以在调用的时候不用传值,但是当该参数有值传入的时候,则会使用新的参数值,忽略默认值.

       func sayHelloToYou(personName: String, isMale:Bool = true) ->String{

           var greet: String

           if isMale{

               greet ="你好" + personName +"帅哥"

            }else{

               greet ="你好" + personName +"美女"

            }

           return greet

        }

    

       println(sayHelloToYou("老码", isMale:false))

        这里注意了:如果我们自己没有给默认参数添加外部参数名,那么swift会给带默认参数取个和内部参数名一样的外部参数名.默认参数一般放在最后,但是当跟可变参数一起的时候,可变参数放在最后.

        

        14.4参数性别是常量函数变量 函数参数默认是常量,在函数体内对参数进行更改会出错的.但是swift允许你吧参数定义成为变量,这样在函数体力改变这个变量的值就不会报错,同时也要注意:函数体内对参数改变只在函数体内有效,其改变不会影响到函数外.

       func factorial(var number:Int) ->Int{

           var result: Int =1

           while number > 1 {

                result = result + number

                number = number -1

            }

           return result

        }

        

       var number: Int =4

       println( factorial(number)) 结果为:10

        println(number) 结果为:4

        

        

        14.5让我变,不管函数内外.swift设计了输入输出参数"inout"机制来处理函数体实参改变问题.只需要在需要被改变的参数名字前面加上inout关键字就可以把这个参数指定为输入输出参数,这样参数如果在函数体内部被修改,修改的最终结果会反映到实参.

       func swap(inout a:Int, inout b:Int){

           let temporary = a;

            a = b

            b = temporary

        }

        

       var a: Int =1

       var b: Int =2

       swap(&a, &b)

       println("\(a)\(b)")//结果:2 1

        

        注意几点:1)只能够传入变量作为参数,也就是a,b只能够是通过 var声明的变量.2)输入输出参数不能够带有默认值.3)如果使用了关键字inout标记了一个参数,这个参数不能够再被var或者let去标记.也就是inoutvar a ,inoutlet a.

        

        14.6函数是一种类型 每个函数都是一种类型

       func count(){

         println("Hello world!")

        }

        上面这个函数的类型就是()->(),函数的类型有函数的参数类型和返回值类型组成.中间用->链接,上面函数的参数和返回值都是空,使用类型是()->().怎么读呢?这个函数类型没有参数也没有返回值.

        

        14.6.2函数类型的变量和常量 因为函数就是一种类型,可以理解为定义一个整形变量,函数类型看成整形.


        

你可能感兴趣的:(swift学习)