常量表示一个值当它被声明出来之后它会一直保持那个值不变,而变量则是一个能够被改变值的东东。常量通常被视为不可改变的,意味着它不可改变(==官方话好多),并且一个变量则是可变的,如果在开发中你已经知道你要创建一个值在你之后的代码中它还是保持这个样纸的话,就把它声明为一个常量吧!
Swift中呢采用let来创建常量并且采用var来创建变量。
1 var myVariable = 42 2 myVariable = 50 3 let myConstant = 42
在swift中呢每个变量和常量都是要有类型的,但是咱们并不需要每次都直接声明出来,咱们只需要创建一个常量或变量,然后让编译器自己推断它的类型就够啦。就像在上面的??里面,编译器推断myVariable是一个整型的变量因为它的初始值就是一个整型的数字。这就叫类型推断。一旦一个常量或一个变量有了类型,类型就是不可变了!
如果我们并没有给初始值提供足够的信息(或者根本就没有给它赋初始值),则可以通过在变量或者常量的后面加上一个:来明确你创建的变量或常量是什么类型的。
1 let impllicitInteger = 70 2 let implicitDouble = 70.0 3 let explicitDouble: Double = 70
Tips:在Xcode里面,通过按住Option然后点击常量或者变量的名字就可以看到它的类型了哦~~~~~==!
注意在swift里面一个值是不能隐形的转换成其他的类型的值的(js好像是隐式的),如果需要请显式的转换吧。
let label = "The width is" let width = 94 let widthLabel = label + String(width)
如果你试着去掉上面的String,看看你能解锁啥error成就!
在swift当中提供了一个炒鸡给力的一种字符串包含值的方式,只需要将值放入圆括号,然后之前加上一个\然后塞入字符串中就ok了,这也被称为字符插入。
let apples = 3 let oranges = 5 let appleSummary = "I have \(apples) apples." let fruitSummary = "I have \(apples+oranges) pieces of fruit."
♠这里画个戳表示一个很重要的东西要出现,可选类型,这玩意很常见。也很好理解,可选可选,意思就是它的值可能可能没有,所以就算没有出现也不要难过(女神范)。一个可选类型的值它要么是包含一个值,要么就是一个nil(这个是swift中空值)来表示值不存在。在类型声明的后面加上一个?来表示这个值是可选的。
1 let optionalInt :Int ? =9
为了得到一个可选值的实际类型(怎么说--!真实长度),你需要拆包它,咱们能够在后续的课程中学习拆包-最简单粗暴的方法就是通过!来拆包。只有通过拆包,你才能知道你得到的值不是一个nil(所以在!和?必然是要成为一对好基友的)
let actualInt:Int = optionalInt!
在swift中Optionals可选变量是相当常见的,并且在很多很多的场景下都会很有用(比如一个值在或不在。。。)。在进行类型转换的时候也很有作用。
1 var myString = "7" 2 var possibleInt = Int(myString) 3 print(possibleInt)
在这段代码中,possibleInt的值打印出来是7,因为myString包含一个整型的值,但是假如你将myString是一个不能转换成整型的玩意的时候,possibleInt就成了nil了。
1 myString = "banana" 2 possibleInt = Int(myString) 3 print(possibleInt)
一个数组是一种用于保存一组自带顺序的元素集类型。创建一个数组通过中括号[],并且获取数组的具体值通过索引,数组的索引都是从0开始咯。
var ratingList = ["Poor","Fine","Good","Excellent"] ratingList[1]="OK" ratingList
如果创建一个空数组,通过初始化语法,后面也会有更多关于初始化语法的知识。
//Creates an empty array.
let emptyArray = [String]()
可能注意到了在上面的代码中用到了一个注释.注释是啥就不用介绍啦,swift中通过//和/*.....*/来添加注释,这个在很多语言中也是很常见的,Xcode中通过按住command+/可以快速注释。
一个隐式拆包变量是一个可选值可以当作非可选值来使用,而不用每次都去显式的拆包(这里大致理解意思但是好像不太深)。这是因为一个隐式拆包值被认为在初始化赋值之后也一直有一个值,即使这个值能够改变。通过在类型后面加上一个!来指明该变量为隐式拆包值。
var implicitlyUnwrappedOptionalInt : Int !
其实我们很少需要在我们的代码里创建一个隐式拆包。更多的,它们被用来追踪接口和源码之间出口(==!实在是不懂这句话)后续APIs的介绍中会看到。
swift 有两种控制声明,条件控制,像if和switch,检查条件是否为真来决定后续代码是否执行。循环控制的,像for-in 和 while,用于多次执行某一段代码。
如果if语句检查条件是否为真,如果是,if语句继续判断后面的语句,所以我们可以在后面通过添加else在if之前来创建一个更加复杂的条件判断,最后形成一个判断链。
1 let number = 23 2 if number < 10{ 3 print("The number is small") 4 }else if{ 5 print("The number is pretty big") 6 }else{ 7 print("The number is between 10 and 100") 8 }
其实这些条件判断都差不太多。
关键是swfit中的条件判断语句能够被化简写法来创造更复杂的,更有趣的语句。下面用到了一个for-in语句来遍历数组(for-in语法能够不断的迭代读取一个集合内的元素,一个接一个的读)
let individualScores = [75,43,103,87,12] var teamScore = 0 for score in individualScores{ if score>50{ teamScore +=3 }else{ teamScore +=1 } }
print(teamScore)
在一个if语句中通过可选绑定来检查一个可选值是否包含一个值。
1 var optionalName :String ? = "John Appleseed" 2 var greeting = "Hello!" 3 if let name = optionalName{ 4 greeting = "Hello ,\(name)" 5 }
如果在上述??中把optionalName改成nil,看看greeting会变成啥样子。再添加一个else来处理如果name是nil类型时输出另外的东西。
如果可选类型是nil,那么条件就是false,大括号中的代码就被跳过了。如果不是nil那么name就会被赋值并且执行大括号中的语句。
也可以通过一个if 语句来绑定多个值,通过添加where来进一步的添加限制条件,在下面的例子里,if语句仅仅在banging 成功并且where条件满足的情况下才执行。
1 var optionalHello:String?="Hello" 2 if let hello = optionalHello where hello.hasPrefix("H"),let name = optionalName{ 3 greeting = "\(hello),\(name)" 4 }
Switch语句在swift中被改的变得很强大,一个switch语句能够支持任何种类型的数据并且很广范围的比较运算符.它并不仅仅局限于整数或等式是否相等。下面的例子中switch语句被用于筛选蔬菜,比较蔬菜中的字符串来执行所匹配上的语句。
1 let vegetable = "red pepper" 2 switch vegetable { 3 case "celery": 4 let vegetableComment = "Add some raisins and make ants on a log." 5 case "cucumber", "watercress": 6 let vegetableComment = "That would make a good tea sandwich." 7 case let x where x.hasSuffix("pepper"): 8 let vegetableComment = "Is it a spicy \(x)?" 9 default: 10 let vegetableComment = "Everything tastes good in soup." 11 }
试试如果去除了default又会解锁啥error。
待续。。。。。
原文:http://www.cnblogs.com/ATM-Yida/p/5027940.html