現代的新語言--Swift初探


新的語言

WWDC簡短的介紹,新的語言Swift就問世了,儘管新語言的名字致使貼吧下歌手粉絲和開發人員們爭搶地盤- -,只是雨燕就是這麼來了。

WWDC keynote裏給Swift打上了很是多標籤:
Closures,Generics,Namespaces,Type inference,Multiple return types

閉包,泛型支持,支持命名空間,去除隱式類型轉換,多返回值等這些優秀的特性讓這門語言顯得現代和便捷,再加上學習了很是多其它語言相似Go,JavaScript等等的優秀語法,它同一時候兼具編譯語言的高性能和腳本語言的交互性,或許這些促成了Apple拿它來代替Objective-C的緣由。這篇文章主要對常常使用語法進行簡單概述。

簡單的賦值與打印

let  l = "hello" //常量賦值,Swift裏面";"不是必要的
var v = "world" //變量賦值
println(l) //使用println來進行log
println("nihao \(v)")//使用\()來格式化輸出

顯式的聲明類型

var str : String = "nihao"swift


var numStr = "4"數組

var realNumber =5數據結構

var sum = numStr + realNumber//這麼寫編譯器會提示error 因爲不支持隱式的類型轉換

當聲明類型時,假設沒有明顯的生命爲String, 編譯器也會進行類型推導(Type inference),以爲它是String類型的。因此在類型上面去除了OC的弊端後,讓錯誤及早的顯現出來。

Optional

但是假設想要實現上面的運算,事實上也是能夠實現的,這裏需要引入一種新的概念Optional.

藉助"?""!"來實現。

當咱們不肯定這個值是否現在或未來可以爲nil時,會在賦值或者使用時加上這些符號標識在尾部。

var nilStr : String? ="nilOrNotNil"閉包

nilStr = nil函數


這樣它就可以變爲nil,默認的賦值是不能賦值爲nil的。
注意這裏的nil並不是Objective-C裏使用的nil空指針,而是一種NilType。

當咱們肯定它不爲空的時候則可以加上"!"
如運算的那個樣例,咱們可以藉助String的toInt()函數和"!"來完畢咱們想進行的運算。
因而代碼看起來像這樣:

var numStr = "4"oop

var realNumber =5性能


var sum =numStr.toInt()! +realNumber學習



數組及字典聲明

var numbers = [1,5,2,1,6]spa

var dict = ["isNew" :"yes",指針

            "name"  : "Swift"]


兩種數據結構都使用中括號來表示,而不是字典用大括號了,這樣卻是能和函數流程控制以及閉包區分開。

numbers[3] =4


可以直接對數組中的元素進行賦值,而沒必要在意是否是mutable array或者array了


流程控制語句

for循環及if語句

numbers = [4,5,6,7,8,9]

var largeThanThree = 0

for n innumbers {

    if n > 3 {

        largeThanThree++

    } else {

        largeThanThree--

    }

}

largeThanThree //6


遍歷字典時可以獲取key value

for (question , answer) indict {

    if question == "isNew" {

        answer //yes

    } else {

        answer //swift

    }

}


對於optional在if語句中的使用需要注意一下

var optionalStr : String? ="swift"

var greeting : String? ="nihao"

optionalStr = nil

if let name = optionalStr {

    greeting = "nihao , \(name)" //不會運行

}


但是假設optionalStr 沒有被賦值爲nil,也就是仍然爲"swift"則會給greeting變量賦值爲"nihao, swift"


switch語句

Swift的switch支持對String的case比較

let object = "water"

var statement = "the object is "

switch object {

case "ice" :

    statement += ""

case "water" ,"other":

    statement += ""

default :

    statement += "未知"

}

statement //"the object is"


這裏再也不需要break,當需要多個匹配統一代碼時仍然用逗號隔開


while語句

var big = Int8.max//127 八位integer最大值

while big > 0 {

    big--

}


控制範圍的for

把一般的for循環用swift寫會是

var loop = 0

for var i = 0; i < 3; i++ {

    loop++

}

loop //3

現在swift支持了一種新的語法來完畢這樣的操做

loop = 0

for i in 0..3 {

    loop++

}

loop //3


那假設想讓i取邊界值,可以用0...3來取代0..3


函數


函數在Swift中變得十分靈活起來,它可以支持單一返回值,返回多個值,甚至嵌套函數,返回函數或者用函數做爲參數等等。

func sayHello(person name : String, weekday day : String) -> String {

    return"hello \(name), today is \(day)"

}

var res = sayHello(person:"mattt", weekday : "monday")

->做爲返回值符號, name前的person 屬於參數表述,也可以不加直接將值傳遞進去,這裏爲了函數方便使用才加上。


可變參數的多返回值

多個不一樣類型或一樣類型的值組成的數據結構Swift裏稱爲元組(tuple)

如下一個函數傳入可變參數,使用元組返回多個值

func caculate(numbers: Int...) -> (Int,Int) {

    var nSum = 0

    var nAvg = 0

    for number in numbers {

        nSum += number

    }

    nSum

    nAvg = nSum / numbers.count

    return (nSum, nAvg)

}

var (s: Int, a: Int) = caculate(1,2,3)

s //6

a //2


嵌套函數

func funs(number : Int) ->Int {

    var y = 10 + number

    func add() {

        y++

    }

    add()

    return y

}


函數也可以做爲返回值進行傳遞

func makeIncrementer() -> (Int ->Int) {

    func addOne(number: Int) ->Int {

        return 1 + number

    }

    return addOne

}

var increment = makeIncrementer()

increment(7)


閉包函數

var numbers: Int[] = [4,3,1,2,5]

numbers.map({

    (number: Int) -> Int in

    let result = 3 * number

    return result

    })



這篇博客簡介了Swift初步的使用,假設有不當的地方但願指出。

相關文章
相關標籤/搜索