美文网首页我的swift路程程序员
在学习swift的一些笔记(五)

在学习swift的一些笔记(五)

作者: 曾迦 | 来源:发表于2015-11-12 10:09 被阅读154次

    元组(Tuples)


    元组数据类型是由多个值组合而成的,可以由相同类型的多个值组成,也可以由不同类型的值组成

      // 元祖类型
      var dog = ("小白",18)
    
      // 下标调用
      dog.0
    
    

    利用下标可以取得元祖数据类型的值

    as(告知编译器类型)


    // 告知编译器 这个由dog.0所取出的数据是一个string类型,理解为类型准换也是可以的
    (dog.0 as String)
    

    -objective-c与swift函数的区别


    ** objective-c 的函数 :**

    // 传入一张UIImage类型的参数,和一个UIControlState的枚举
    - (void)setImage:(UIImage *)image forState:(UIControlState)state;   
    

    上面是一个标准的objective-c对象方法,是通过对象调用的其中:
    "-" = 对象方法的标示 "+"为类方法.
    (void) = 返回值类型.
    setImage: = 方法名 : 后面代表着要跟一个参数.
    (UIImage *) = 参数类型.
    image = 形参的变量名称.
    forState: = 方法名 第二段方法名.
    (UIControlState) = 参数类型.
    state = 第二个参数变量名.

    因为objective-c语言方法的语法,可以在方法名种尽可能的描述详细整个方法意思和参数的作用,所以在有些时候,方法的注释很多程序员写得都不是很完全.

    ** swift 的函数: **

    • 无参数无返回值的函数:
    // 一个无参数,无返回值的函数 调用
    demo();
    
    // 一个无参数,无返回值的函数声明
    func demo(){
          println("调用");
    }
    
    

    在swift中,函数的定义符号是func后面的demo就是方法的名称,如果没有参数和返回值,定义函数只书写 func+ 函数名称(方法名称)+() + { 代码段 } 就可以了,调用只需要 方法名+().

    
    
    // 一个参数,无返回值的函数 调用
     demo("jack");
           
    
    // 一个参数,无返回值的函数 声明(定义)
     func demo(name : NSString){
           
          println("我叫\(name)");
    }
    
    打印出 "我叫jack"
    
    // 两个参数,无返回值的函数 调用
     demo("jack", age: "18");
    
    // 两个个参数,无返回值的函数 声明(定义)
    func demo(name : NSString,age : NSString ){
        
            println("我叫\(name)今年\(age)岁");
        }
    
    打印出 "我叫jack今年18岁"
    

    以上的方法中可以看出在swift中可以允许相同的方法名对应不同的参数,而值得注意的是,第二个参数的形参名称是不允许重复的,即拥有相同方法名,并且都是2个形参,第二个形参的变量名称不允许相同.

    形参的格式 : 形参名称: 数据类型 (形参中间用,隔开)


      // 调用单个返回值的函数
      var name:NSString = demo1()
    
      // 单个返回值的函数
      func demo1() ->(NSString){
              return "swift"
          }
    
    

    单个返回值的函数格式:func 函数名( 形参 ) ->(返回值类型)


      // 调用函数,得到一个元祖类型的返回值
      let te =  demo1("我")
      // 将元祖类型的返回值一一取出拼接
      let text = (te.0 as String) + (te.1 as String)  + (te.2 as String);
      // 打印
      print(text);
     
      // 打印结果为: 我测出了BUG  
    
      // 单参数 多返回值的函数
      func demo1(name:NSString)->(NSString,NSString,NSString){
        
            return (name,"测出了","BUG");
        }
    

    swift新加入了多个返回值的函数,这个样的函数返回的是一个元祖类型
    格式: func 函数名(形参列表) ->(返回值,...)


    数组当做形参的2种形式:
    1种:

      // 调用函数传入数组
       arrDemo([3,6]);
      
      //  直接传入一个数组变量
       func arrDemo(arr:NSArray){
            // 遍历数组元素
            for indext in arr{
                // 打印得到3,6
                print(indext);
            }
       }
    

    2种:

      // 调用函数
        arr1Demo(11.3,222.341,11112.3);
      // 传入参数用,隔开
        func arr1Demo(num:CGFloat...){
            // 遍历数组元素 并打印
            for indext in num{
                print(indext);
            }
      }
    

    1种格式: 形参变量:NSArray
    2种格式: 形参变量: 数据类型...


    闭包:

    override func viewDidLoad() {
            super.viewDidLoad()
            
            func nog(){
            
                print("打印日志")
            }
            
            nog()
            
        }
    
    

    闭包简单就是说在一个函数中能够定义一个函数,在外部函数中可以调用里面的函数,并且里面的函数可以访问外部函数的变量.

        // 首先定义一个接收一个int参数 一个string返回值的函数,这是一个内部函数
        func test(num:Int) -> (String) {
                
            return "\(num)号测试";
                
        }
        
        // 在定义一个外部函数,这个函数接收一个函数变量, 这个函数拥有一个int的形参和  string的返回值
        func demo( test: Int -> (String) )->NSString{
           
           // 在外部函数中调用当做形参的内部函数
           return test(2);
        }
      
        // 将这个外部番薯调用, 并用一个字符串接收返回值
        let testStr =  demo(test)
    
        // 打印 得到结果是: 2号测试
        print(testStr);
    

    函数作为形参 ( 函数变量名 : 形参列表 -> (返回值类型) )

        // 定义一个外部函数 这个函数的返回值是一个闭包函数,传入一个string形参,返回值是string的函数
        func demo3()->(String -> String){
            // 内部函数,形参string ,返回值string
            func text(name:String)->String{
            
                return name;
            }
            // 返回的是闭包函数
            return text;
        }
        // 调用闭包函数,得到 一个函数 形参是string 返回值是string
        let text = demo3();
        // 调用这个函数
        let n :String = text("小白");
        // 打印最后得到的值 输出是小白
        print(n)
    

    函数作为返回值 ->(形参->返回值)


    匿名闭包函数

        // 首先先写一个匿名闭包函数,这个函数接收3个字符串参数并且拼接后返回
        // 但是我们没有方法名所以访问不了这个函数
        {(name:String,name2:String,name3:String) -> String in
                return name + name2 + name3
        }
       // 在写一个接收的函数,这个函数可以接收上面的那种匿名函数的类型,并且返回一个字符串
       func demo4(test:(String,name2:String,name3:String)->String  )->String{
        
       } 
      // 在这个函数中调用匿名函数,所返回的是中国人3个字,
      func demo4(test:(String,name2:String,name3:String)->String  )->String{
          return test("中",name2: "国",name3: "人");
      } 
      // 那么我们要执行 demo4这个函数 并且将匿名函数传进去,所得到的返回值是"中国人"
      let name =   self.demo4({(name:String,name2:String,name3:String) -> String in
          return name + name2 + name3
      })
      // 打印
      print(name)        
    

    相关文章

      网友评论

        本文标题:在学习swift的一些笔记(五)

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