初識你---------Swift【上篇】

從2014年WWDC(蘋果開發者大會)發佈的新開發語言Swift,到2015年的WWDC開發者大會上,蘋果公司推出了Swift2.0版本,而且Swfit徹底開源。並且每一次Xcode的更新Swift都會跟着作各類調整,如今已經有好多項目都在使用,尤爲是在移動端的動畫切換方向,html

更是給用戶帶來了一場新的視覺盛宴,那就簡單認識一下Swift數組

首先是Swif定義變量的方式app

在Swift中使用「let」修飾一個常量,使用「var」修飾一個變量;ide

  • let修飾常量的值是不能夠更改的;
  • var修飾的變量的值是能夠更改的;
  • 在聲明常量和變量的時候可使用表情符號、中文等命名常量名和變量名。

 Swift定義變量或者常量的時候,須要標識出變量或者常量的類型,若是不標識,會根據初始值自動推斷。函數

如:動畫

//會自動推斷變量a爲Int類型 var a = 10 //會自動推斷常量b爲String類型 let b = "windsSunShine"

Swift會根據初值自動的推斷出本身是什麼類型的變量或者是常量,因此在開始定義的時候必定要賦初值或者指定數據類型,可是spa

Swift不支持隱式類型轉換的code

即不一樣類型的兩個數據之間不能進行操做htm

若是讓兩個不同的數據類型變量或者常量作加減乘除的操做須要提早改變變量或者是常量的數據類型對象

如:

var a = 100 var b = 300.5 var c = Double(a) + b

當在Swift裏面設置nil值時須要在數據類型的後面添加一個? 表示這個變量能夠爲nil

 

var a1 : Int? = nil;

// 在Swift裏面Bool類型是一個結構體,只有兩種結果,true 和false 因此不能經過之前的非0 爲真去肯定Bool的真假

錯誤寫法

//var bool  = 0;

// 正確寫法

var bool = true print(bool)

在Swift裏面定義字符串變量

// 字符串的拼接 // var c = "dasadas" var d = "sdfafsdcx" // c d 拼接字符串  var f = c + d

須要注意的是此時的  c d  f 都是 var類型的

 

在Swift裏面定義數組:

 

使用 [ ] 去表示定義一個數組

// 定義的基本方式

 第一種  根據初值定義

let array = [1, 2, 3]

Swift中數組裏面的元素必須是同一數據類型【在Swift 2.0作的改變】

array1裏面會自動轉換成NSObject對象類型

let array1 = [1, 2, 3, "b"]

 第二種  先指定數組裏面元素的類型,在去給初值

 

let array2:[Int] = [1,2,3];

訪問數組元素

// 使用var定義數組 數組中若存在值能夠根據下標更改 var array:[Int] = [100]; // var array1:[Int] = [1,2,3,4,5]; // 運算符重載 var array2 = array + array1 print(array2); // 在數組的末尾添加一個元素 // array必須是變量的類型 array.append(10000) // //// 在數組中插入一條數據 array.insert(200000, atIndex: 1) //移除數組中的某個元素 array.removeAtIndex(1) print(array)

 

在Swift裏面定義字典:

 

定義字典的格式:

 

let/var 字典名 = [key: value, key : value];

let dictionary = ["a" : 1, "b" : 2];

若是字典由初值去肯定key和value的數據類型,則裏面的key和value的數據類型能夠不一樣

// Swift2.0以前不能夠 let dictionary1 = ["a" : 1, "b" : 2, 4 : "4"];

// 自定義輸出

  print("type1.0 ====\(type1.0)");

 \ 後面的()裏面寫入的是具體的對應的值

 

 

 

// 建立一個字典類型的變量,能夠爲空值nil var dictionary2:[String:Int]? = nil var dictionary2:[String:Int]? = ["1":300]; // 使用? 修飾的數組在調用是須要在數組名後面添加一個"!"進行拆包 // 建立字典中的某個key值對應的value dictionary2!["1"] = 200; print(dictionary2);

在Swift裏面定義元組:

 

 定義一個元組的格式:

 let 或者 var + 元組名字 =( 元素 )

元組是Swift中尤其特殊的一個,在Swift中真正實現能夠有多的返回值的狀況就是經過元組實現的

let type11 = ("windsSunShine",18); // let type22:(name :String, age : Int) = type11 // print(type22); //// 拼接打印 print("My name\(type22.name),My age is \(type22.age)歲")
//switch 能夠搭配元組使用 // 定義元組使用() let point = (10,10) // 應用與動畫的實現 switch point { case (10, 10): // 爲(10,10)這個點時輸出元組  print(point) case(_,10): // 使用_忽略某個條件 print(point.1) case(10,_): print(point.0) case(_,_): // 可使用__忽略全部條件  print(point) }

注意:

在Swift中 i++ 於 i ++ 是不一樣的,

在Swift 寫i ++ 是錯誤的 它是根據空格或者回車來斷句的,因此必定要注意空格的使用

 

Swift的if判斷語句:

在if判斷中 Swift和 Objective-c的區別在於 在判斷語句中要將條件寫完整 括號無關緊要

 

var timer :[Int]? = nil; if timer != nil{ }else { }

 

Swift的循環語句:

for:

 

 

//..< 表明 從數字1 開始到數字n 可是不能包括數字n //... 表明的是從數字1 開始到數字n可是包含數字n for var i in 0..<array22.count{ print(array22[i]) }

 

 

 

此時咱們能夠用Swift就能夠寫一個冒泡排序了以下:

 

var array33 = [23,45,43,12,13]; print(array33) for var i = 0; i < 5; i++ { for var j = 0; j < 4 - i; j++ { if array33[j] > array33[j+1] { var temp = array33[j]; array33[j] = array33[j+1] array33[j+1] = temp } } } print(array33);

While循環

若是說for循環是「屌絲」循環的話,那while必定是那個高富帥

var i = 0; while i < 10 { i++ print(i); } // Swift裏面沒有 do-while 循環用repeat替代, 在Swift1.0時,Swift中也是do-while 而在2.0以後成了repeat-while  repeat { i++ print(i) }while i < 10

 

分支循環switch

switch在Swift中和OC的區別在於

Swift中不用寫break ,可是default裏面須要寫東西,每個case裏面也須要寫東西

let value = 0; switch value { case 0: print(value) fallthrough // 表示0狀況下面的語句所有執行 case 1: print("value======\(value)") default: print("error")

 

switch還能夠對值進行區間的匹配

 

switch value { case 0...10: // 包含10  print(value); case 11..<20: // 不包含20 print("value=====\(value)") default : print("error") }

switch能夠搭配where使用

 

let a1 = 10 switch a1 { case 1 where a1 < 10: print(10) default: print(100) }

Swift裏面的方法的叫法與OC中有些許的不一樣在Swift中成爲函數變量 ,而定義函數變量的的關鍵字就是: func

 

 定義函數的格式:

 

func(關鍵字) test(函數名)(參數)-> 返回值類型{}

 

 若是沒有返回值能夠將 -> Void 省略

 

無參無返回值

func test() -> Void { print("我是一個無參無返回值的函數") } func test1(){ print("精簡以後的函數") } // 調用函數 test() test1()

 

 

無參有返回值

 

 

 

func test2() -> String { return "a" } print(test2());

 

 

 

// 返回一個OC的數據類型 func test3() -> NSArray { return ["a","c",3] }

 

 

// 返回一個Swift的數組 要明確元素的類型  func test4() -> Array<Int> { return [1,3,4] } func test5() -> Array<NSObject> { return [1, 3, "r"] }

 

 

有多個返回值的現象:

 

 

// Swift中能夠返回多個返回值,實質上是返回一個元組 func test6() ->(String, Int) { return ("a", 6)

 

 

有參無返回值

func test11( name: NSString){ print(name) }
// 參數是數組類型的函數 有返回值必定要寫 -> func test22(people : Array<Int>) -> Void { }

 

在Swift的函數變量中還有一個特別的地方,那就是函數的命名方面

在Swift中包含

外部參數名 

內部參數名 舉例以下:

 

func test33(waibu neibu:String) { print(neibu); print("windsSunShine") } // // // test33(waibu: "hello");

打印結果爲:

hello  // 先打印的是內部參數對應的值,即調用的值

windsSunShine  // 接着打印的是函數要執行的內容

 

 

若是不想讓外界知道你的外部參數名的話可使用下劃線忽略掉外部參數名,每個參數會自帶一個外部參數名的,若是不寫則和內部參數名一致:以下面的函數的外部參數名 age ,內部參數名也是age

 

func test44(nihao name:String, age:Int) { print("name = \(name),age =\(age)") }

除此以外

在函數的內部是不能改動參數的值的,由於每個參數是默認使用let定義的

若是須要改的話,能夠手動的使用var定義

func test9(var name : String) { name = "a" }



func test1(inout name: String) { name
= "你好" } var name = "我很好" test1(&name) print(name)

打印結果是: 你好

使用inout修飾參數名,是var定義的 能夠更改參數的值 在使用時能夠改變傳進來的參數值

在Swift裏面能夠嵌套定義函數:而在OC中只容許嵌套調用不容許嵌套定義的,同時在C 語言的函數中也是不容許嵌套定義函數的

func test14() { func test1() { func test2() { } } }

 

最後經過上面的基礎,咱們能夠簡單的封裝一個小demo用來數組的排序:代碼以下:

 

先建立一個file在file裏建立一個函數:

func maopao( inout array1 : Array<Int>) -> Void { for var i = 0; i < array1.count; i++ { for var j = 0; j < array1.count - 1 - i; j++ { if array1[j] > array1[j+1] { let temp = array1[j] array1[j] = array1[j+1] array1[j+1] = temp } } } }

接着就能夠在外部調用了

 override func viewDidLoad() { super.viewDidLoad() var array = [1,23,56,2,7,14,87,23,10]; maopao(&array); print(array); }

歡迎轉載,請註明轉載和原文出處:http://www.cnblogs.com/windsSunShine/p/4989476.html

相關文章
相關標籤/搜索