标签:
变量与常量
Swift使用var声明变量,let声明常量。
var myVariable = 42 myVariable = 50 let myConstant = 42 //myConstant不能修改
类型推导
Swift支持类型推导(Type Inference),所以上面的代码不需指定类型,如果需要指定类型:
var str: String = "Swift" var str = "Swift" //自动推断类型为String
Swift的变量一旦声明了,就不能修改类型了,上面的例子中str只能是字符串类型,之后无论如何赋值都不能修改其类型。
所以我们说类型往往可以省略,但有些地方还是不能省略。特别是在集合类型上面,例如一个本来想放NSObject的字典,因为初始化用的字符串,就被推断成一个完全都是字符串的字典了。
有一个奇葩的地方,Swift 可以用任意Unicode字符当做变量名,也就是说,中文,图释,都是可以的。
var 中文 = "swift" var ?? = "haha"
字符串String
注意这里生成的String,并不是NSString。他甚至都不是一个Object,我们可以在定义里面看到:
struct String { init() }
String和CFString一样,他是一个Struct! 不过String可以和NSString互相替代,而且API通用。
数组和字典
Swift使用[]操作符声明数组(Array)和字典(Dictionary):
var shoppingList = ["catfish", "water", "tulips", "blue paint"] shoppingList[1] = "bottle of water" var occupations = [ "Malcolm": "Captain", "Kaylee": "Mechanic", ] occupations["Jayne"] = "Public Relations" // 一般使用初始化器(initializer)语法创建空数组和空字典: let emptyArray = String[]() let emptyDictionary = Dictionary<String, Float>() // 如果类型信息已知,则可以使用[]声明空数组,使用[:]声明空字典。
Array和String一样,也是结构体。不过,Array不具有NSArray的API特性。需要显示转换成NSArray才可以调用其方法。
枚举
通过循环枚举,即
30 while flag {enum(arr)} 31 for a in arr {} 32 for var i=1;i<13;++i {} 33 for i in 1..10 {}
控制流
Swift的条件语句包含if和switch,循环语句包含for-in、for、while和do-while,循环/判断条件不需要括号,但循环/判断体(body)必需括号:
let individualScores = [75, 43, 103, 87, 12] var teamScore = 0 for score in individualScores { if score > 50 { teamScore += 3 } else { teamScore += 1 } }
单路分支
在 if 语句中,条件必须是一个布尔表达式
77 if blablabla { 78 } 79 else{ 80 } 注意:这里的大括号不可以省略。 多路分支 81 switch num 82 { 83 case 1: 84 85 case 2: 86 87 default:
}
注意:不再需要写break,且default必须有!且必须所有条件都要覆盖到,一般情况下都会有default,但是若在enum中使用,就可以用case搞定了。
对于case来说,不仅可以写 case 1, case 2, 还可以写 case 1, 2, 3, 4, 甚至 case, 1, 2, 3, 4, 7..10
可空类型
结合if和let,可以方便的处理可空变量(nullable variable)。对于空值,需要在类型声明后添加?显式标明该类型可空。
var optionalString: String? = "Hello" optionalString == nil var optionalName: String? = "John Appleseed" var gretting = "Hello!" if let name = optionalName { gretting = "Hello, \(name)" }
? 表示的是:Optional。写法如下:
var possibleValue: Int? = animalLegs["xiaohaha"]
1 if possibleValue {
2 println("Notnil")
3 }
4 else {
5 println("111")
6 }
!的作用就是突破Optional,拿到内部值 62 if possibleValue { 63 let value = possibleValue! 64 println("xiaohaha has \(value) legs") 65 } 66 else { 67 println("> <") 68 } 不过这里,有个简练的写法,更漂亮优雅。 69 if let value = possibleValue 70 { 71 println("xiaohaha has \(value) legs") 72 } 73 else 74 { 75 println("> <") 76 }
//如果变量的可选值是 nil,条件会判断为 false,大括号中的代码会被跳过。如果不是 nil,会 将值赋给 let 后面的常量,这样代码块中就可以使用这个值了。
其他循环
for-in除了遍历数组也可以用来遍历字典:
let interestingNumbers = [ "Prime": [2, 3, 5, 7, 11, 13], "Fibonacci": [1, 1, 2, 3, 5, 8], "Square": [1, 4, 9, 16, 25], ] var largest = 0 for (kind, numbers) in interestingNumbers { for number in numbers { if number > largest { largest = number } } } largest
while循环和do-while循环:
var n = 2 while n < 100 { n = n * 2 } n var m = 2 do { m = m * 2 } while m < 100 m
Swift支持传统的for循环,此外也可以通过结合..(生成一个区间)和for-in实现同样的逻辑。
var firstForLoop = 0 for i in 0..3 { firstForLoop += i } firstForLoop var secondForLoop = 0 for var i = 0; i < 3; ++i { secondForLoop += 1 } secondForLoop
标签:
原文地址:http://www.cnblogs.com/ShawnLi/p/4501985.html