//swift 里面没有头文件和实现文件。只有一个.swift文件
//swift 里面没有main的概念,程序从main。swift开始执行
//swift 每一条执行语句可以不用分号结束,多条语句在同一行的时候才需要分号区分
//swift 引用其他文件的内容直接引用,不用导头文件
//print 是swift里面的打印函数,效率毕NSLog要高;可以不使用占位符 ,拼接是使用()
//变量 常量 可选类型 控制流
import Foundation
//变量:定义之后允许改变,通过var来表示
//常量:定义了之后不允许改变,通过let,常量定义出来来一定要赋值,不赋值会出错
//swift 会根据初值来对变量/常量 进行自动推断
//明确指明数据类型 let/var变量名:数据类型=初值
let number = 20
let number1 = 12.2
var number2:Int = 20
//number2 =34.4 不允许
//不同数据类型之间不能直接运算,必须进行强转
let result:Int = Int(number1)+number2
let result1:Double = number1+Double(number2)
print("result = (result)")
//println("Hello(123), World!")
//字符Character:用双引号表示,单个字母,指明类型Character
let cha:Character = "a"
//字符串:String:双引号表示,多个字符
let str = "HelloWorld"
//可选类型:如果某一个变量可能为nil(空),那么这个变量就是数据可选类型,可选类型用 ?进行标识
//打印可选类型会有optional,如果要去掉optional就进行强制解包
// var 变量名:数据类型? = 初值(可以不给)
var num0:Int? = 30
//num0 = nil
let num1:Int = 20
//可选类型不能直接参与运算,必须进行强制解包之后才可以参见运算,强制解包用 ! 表示
//对可选类型进行强制解包必须确保可选类型的值不是nil,否则对nil进行强制解包会导致系统奔溃
//unexpectedly found nil while
//unwrapping an Optional value
let sum = num0! + num1
print("sum=(sum)")
//布尔类型
let flag:Bool = true//false
//条件判断 : if
//(1)if后面的小括号可以去掉,大括号不能省略(即使里面只有一句代码)
if flag{
print("flag is true")
}
//(2)if没有非零即真的概念 只有true/false
let value = 10
if value>0{
print("value > 0")
}
//(3)可选类型的条件判断
var name:String?="hello"
//<1>: if-let/var:先判断可选类型name是否为nil(空),如果不为nil就将name进行强制解包后的值赋给temp,然后执行代码段。否则的话就不执行
print("name=(name)")
if let temp = name{
print(temp)
}
//<2>if-let/var-where 是在if-let的基础上对定义的局部变量再做一次判断,两个条件都满足的时候执行{}里的代码块
if let temp = name where temp == "hello"{
print("if-let-where:name=hello\n")
}
var n:Int?=5
if let temp = n {
for(var i=0;i<n;i++){
print("Hello World\n")
}
}
//<3> guard:如果可选值count不为nil的话就强制解包count的值给temp 否则就执行{}里面的代码块,return一定要写
//
//func demo(){
// let count:Int? = 3
// guard let temp = count else{
// print("count 为nil")
// return
// }
// print(temp)
//}