//
// main.swift
// SwiftTest
//
// Created by on 16/10/20.
// Copyright (c) 2016年 . All rights reserved.
//
//swift 里面没有头文件和实现文件,只有一个swift文件
//swift里面没有main的概念,程序从main,swift开始执行
//swift每一条执行语句可以不用分号结束,多条语句在同一行的时候才需要分号区分
//swift引用其他文件的内容直接引用,不用导头文件
//print是swift里面的打印函数,效率比NSlog要高;可以不使用占位符,拼接采用\()
//常量 变量 可选类型 控制流
//变量:定义之后可以改变,通过var来改变
//常量:一经赋值定义了之后不允许改变,通过let,常量定义出来一定要赋值,不赋值会出错
//swift会根据初值来对变量/常量进行自动推断
import Foundation
//定义一个常量
let number=30
let number1=31.144
//定义一个变量 明确指明数据类型,let/var 变量名:数据类型=初值;
var number2=40
var number3="asdasd"
//number=3.14 不允许 不同的数据类型
//let result=number1+number2 不同的数据类型之间不能直接运算,必须进行强转
let result=Int(number1)+number2 //浮点型转换为整型
let result2=Double(number2)+number1 //整型转换为浮点型
print("Hello, World!")
let cha:Character="a"//明确字符类型 Character:用双引号表示,单个字母,指明类型
//String:用双引号表示,字符串
let str:String="'string"
//可选类型:如果某一个变量可能为nil,那么这个变量就是数据可选类型,可选类型用? 进行表示
//var 变量名:数据类型?=初值(可以不给初值)
var num0:Int?=50
//num0=nil
print(num0)//打印可选类型会有optional字眼,如果要去掉要进行强制解包
//可选类型不能直接参与运算,必须就行强制解包之后才能参加运算,强制解包用“!”表示
//错误:unexpectedly found nil while unwrapping an Optional value对可选类型解包必须确保可选类型的值不是nil,否则对nil进行强制解包会导致系统崩溃
let num1:Int=20
let sum=num0!+num1
print("SUM=\(sum)")
//变量名可以随便命名
let 猴子="请来的逗比"
print("\(猴子)")
//布尔类型
let flag:Bool=false//or ture
//if 后面的小括号可以去掉,大括号不能省略(即使里面只有一句代码)
ifflag{
print("\(flag)")
}
//
let value=10
/*错误写法
if value{
print("\(value)")
}
*/
//if没有非零即真的概念,只有true/fasle
ifvalue>0{
print("\(value)>0")
}
//可选类型的条件判断
var name:String?="hello"
//<1>if-let/var 先判断可选类型是否为空 如果不为nil就将可选类型进行强制解包后的值赋值给定义的变量,然后执行代码段。否则的话就不执行
iflet temp=name{
print(temp)
}
//<2>if-let/var-where:是在if-let的基础上对定义的局部变量再做一次判断
//条件都满足时才执行{}中的代码段
iflet temp=namewhere temp=="hello"{
print("name=hello")
}
//定义一个整形可选值,如果该整形可选值不为nil的话,使用for循环打印N遍“”
var n:Int?=5
iflet t=n{
for(var i=0;i<n;i++){
println("nimei")
}
}
//<3>guard:如果可选值count不为nil的话就强制解包的值给temp,否则就执行{}里面的代码段,return 一定要写
//由于博主的Xcode版本较低 所以无法测试下面的代码
/*func demo(){
let count:Int?=3
guard let temp=count else{
print("count为nil")
return
}
}
*/