新的语言
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"
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"
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初步的使用,如果有不当的地方希望指出。
现代的新语言--Swift初探