swift是什么?
swift是苹果于wwdc 2014发布的编程语言,这里引用the swift programming language的原话:
swift is a new programming language for ios and os x apps that builds on the best of c and objective-c without the constraints of c compatibility.
swift adopts safe programming patterns and adds modern features to make programming easier more flexible and more fun.
swift’s clean slate backed by the mature and much-loved cocoa and cocoa touch frameworks is an opportunity to imagine how software development works.
swift is the first industrial-quality systems programming language that is as expressive and enjoyable as a scripting language.
简单的说:
swift用来写ios和os x程序。(估计也不会支持其它屌丝系统)
swift吸取了c和objective-c的优点,且更加强大易用。
swift可以使用现有的cocoa和cocoa touch框架。
swift兼具编译语言的高性能(performance)和脚本语言的交互性(interactive)。
swift语言概览
基本概念
注:这一节的代码源自the swift programming language中的a swift tour。
hello world
类似于脚本语言,下面的代码即是一个完整的swift程序。
1
println(" hello world" )
变量与常量
swift使用var声明变量,let声明常量。
1
2
3
var myvariable = 42
myvariable = 50
let myconstant = 42
类型推导
swift支持类型推导(type inference),所以上面的代码不需指定类型,如果需要指定类型:
1
let explicitdouble : double = 70
swift不支持隐式类型转换(implicitly casting),所以下面的代码需要显式类型转换(explicitly casting):
1
2
3
let label = " the width is "
let width = 94
let width = label + string(width)
字符串格式化
swift使用(item)的形式进行字符串格式化:
1
2
3
4
let apples = 3
let oranges = 5
let applesummary = " i have (apples) apples."
let applesummary = " i have (apples + oranges) pieces of fruit."
数组和字典
swift使用[]操作符声明数组(array)和字典(dictionary):
1
2
3
4
5
6
7
8
var shoppinglist = [" catfish" " water" " tulips" " blue paint" ]
shoppinglist[1] = " bottle of water"
var occupations = [
" malcolm" : " captain"
" kaylee" : " mechanic"
]
occupations[" jayne" ] = " public relations"
一般使用初始化器(initializer)语法创建空数组和空字典:
1
2
let emptyarray = string[]()
let emptydictionary = dictionary< string float> ()
如果类型信息已知,则可以使用[]声明空数组,使用[:]声明空字典。
控制流
概览
swift的条件语句包含if和switch,循环语句包含for-in、for、while和do-while,循环/判断条件不需要括号,但循环/判断体(body)必需括号:
1
2
3
4
5
6
7
8
9
let individualscores = [75 43 103 87 12]
var teamscore = 0
for score in individualscores {
if score > 50 {
teamscore += 3
} else {
teamscore += 1
}
}
可空类型
结合if和let,可以方便的处理可空变量(nullable variable)。对于空值,需要在类型声明后添加?显式标明该类型可空。
1
2
3
4
5
6
7
8
var optionalstring: string? = " hello"
optionalstring == nil
var optionalname: string? = " john appleseed"
var gretting = " hello!"
if let name = optionalname {
gretting = " hello (name)"
}
灵活的switch
swift中的switch支持各种各样的比较操作:
1
2
3
4
5
6
7
8
9
10
11
let vegetable = " red pepper"
switch vegetable {
case " celery" :
let vegetablecomment = " add some raisins and make ants on a log."
case " cucumber" " watercress" :
let vegetablecomment = " that would make a good tea sandwich."
case let x where x.hassuffix(" pepper" ):
let vegetablecomment = " is it a spicy (x)?"
default:
let vegetablecomment = " everything tastes good in soup."
}