標籤:style java 使用 os io 資料 for art
新的語言
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來進行logprintln("nihao \(v)")//使用\()來格式化輸出
顯式的宣告類型
var str : String = "nihao"
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裡使用的nilnull 指標,而是一種NilType。
當我們確定它不為空白的時候則能夠加上"!"如運算的那個範例,我們能夠藉助String的toInt()函數和"!"來完畢我們想進行的運算。於是代碼看起來像這樣:
var numStr = "4"
var realNumber =5
var sum =numStr.toInt()! +realNumber
數組及字典聲明
var numbers = [1,5,2,1,6]
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初步的使用,假設有不當的地方希望指出。