口水话: Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制。Swift 采用安全的编程模式,增加了现代功能使编程更容易、更灵活、更有趣。Swift 以成熟且备受宠爱的 Cocoa 和 Cocoa Touch 框架为 支撑,这是一个重新构想软件开发的机会。
不管怎样,让我们先高呼一声
println("hello world!")
- 没错输出语句对比c和oc简单多了 并且swift可用分号也可不用分号
- 还有你肯定很奇怪,怎么没有main函数,不需要,在 Swift 中,这行代码就是一个完整的程序。
先简单认识一下
1. 常量和变量
使用 let 来声明常量,使用 var 来声明变量。一个常量的值在编译时并不需要获取,但是你只能为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,但是需 要使用很多次。
1. var myVariable = 42
2. myVarialble = 50
3. let myConstant = 42
常量或者变量的类型必须和你赋给它们的值一样。然而,声明时类型是可选的,声明的同时 赋值的话,编译器会自动推断类型。在上面的例子中,编译器推断出 myVariable 是一个整数(integer)因为它的初始值是整数。Swift 是一门类型安全的语言
显式的指定类型
let explicitDouble: Double = 70
注意:值不会隐式的转为其他类型,如果你需要把一个值转换成其他类型,请显式转换。
var label = "The width is "
var width = 100
var widthLabel = label + String(width)
如果删除最后一行的String,会报错哦,报错内容
cannot invoke '+' with an argument list of type (String, Int) 就是说 + 不能连接string和int,类型不同不能自动连接转换,这个和java不同,java是可以自动将int转为string 的
的作用: 使用()把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠
var apples = 3
var age = 125
var appleSummary = "I have (apples) apples"
println(I'm (age) years old
用这个简化了输出
2. 数组和字典
说明:swift中字典和数组都使用[],使用下标和key来访问元素,并且不像oc一样区别可变和不可变了
// 数组
var shoppingList = ["catfish", "water", "tulips"]
shoppingList[1] = "bottle of water" // 直接改变元素的值
// 字典 键值对之间用','号分隔
var occupations - [
"Malcolm" : "Captain",
"Kaylee" : "Mechanic"
]
occupations["Jayne"] = "Public Relations"
创建空的字典和数组
let emptyArray = [String]()
let emptyDict = Dictionary<String, Float>()
3. 流程控制语句
使用 if 和 switch 来进行条件操作,使用 for-in、for、while 和 do-while 来进行循环。包裹条
件和循环变量括号可以省略,但是语句体的大括号是必须的
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores{
if score > 50{
teamScore += 3
} else {
teamScore += 1
}
}
在 if 语句中,条件必须是一个布尔表达式——像 if score { ... }这样的代码是错误的。
在 if 语句中,即使if后边的语句只有一句也要写{}
if语句右边可以用赋值表达式 但是=右边的必须是可选类型
正确的写法: 只有可选类型这个赋值表达式会返回bool结果
var tempStr: String? = "hello" // 可选类型
if let str1 = tempStr { // 只有可选类型这个赋值表达式会返回bool结果
println(str1)
}
错误的写法
var Age = 20 // 不是可选类型
if var oldAge = Age{
oldAge = Age
}
可选类型,一个可选的值可能试一个具体的值或者是nil,表示值缺失。在类型后边加上问号来标记这个变量的值是可选的
var optionalString : String? = "hello
optionalString == nil
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, (name)"
}
如果变量的可选值是 nil,条件会判断为 false,大括号中的代码会被跳过。如果不是 nil,会 将值赋给 let 后面的常量,这样代码块中就可以使用这个值了。
switch 支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。
var vegetableComment = "haha"
let vegetable = "redpepper"
switch vegetable{
case "celery":
vegetableComment = "Add some raisins and make ants on a log"
case "redpepper", "watercress":
vegetableComment = "hahaha"
case let x where x.hasSuffix("pepper"): // where 字句
vegetableComment = "red pepper"
default:
vegetableComment = "defalt"
}
println(vegetableComment)
通过改变vegetableComment的值可以看到switch的子句的强大
swift中的switch匹配代码case中:
- 可以同时匹配多值参数,就是一个case后边可以跟多个匹配条件,多个匹配条件的匹配结果是逻辑或运算的,也就是说:多参数中只要有一个和条件匹配了就算匹配成功.oc和java中一个case后边只能有一个匹配条件;
- swift有where子句,在case匹配条件中可以直接写表达式来匹配;
- 关于default的情况:只要case的匹配是exhaustive(详尽的),不然就必须有default
如果是一个枚举类型内部的switch case字句把所有的枚举都匹配过 这时可以不用default子句
总之,感觉swift是一种很安全和严谨的语言;特点
- 不能隐式的进行类型转换,java可以隐式转换,方便的同时也存在着潜在的危险
- 可选类型的存在将程序的逻辑判断和编译的任务整合到了语法中;
继续看while和do-while 还有for语句
你可以在循环中使用..来表示范围,也可以使用传统的写法,两者是等价的:
for i in 0..3 {
}
// 或者
for var i=0; i<3; i++{
}