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

元组(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)        
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,547评论 4 374
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,787评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,175评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,752评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,169评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,056评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,195评论 2 321
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,980评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,724评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,872评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,344评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,667评论 3 264
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,379评论 3 245
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,202评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,992评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,189评论 2 286
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,987评论 2 279

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,455评论 1 51
  • 我常常在想风是怎么来的,风为什么叫风,风的形态是什么样子的,想了很多关于风的问题,自己便也变成了风。
    风中的一粒沙子阅读 177评论 0 0