在學習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閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,529評論 1 51
  • 我常常在想風是怎么來的,風為什么叫風,風的形態是什么樣子的,想了很多關于風的問題,自己便也變成了風。
    風中的一粒沙子閱讀 207評論 0 0