import Foundationprint("Hello, World!")
//在swift中使用print输出
//1.定义一个(常量let ;变量var)
///定义常量
//let myName = "斌斌"//
//myName = "乐乐"
//let修饰的常量是不能被改变的.
//print(myName)////定义一个变量
// var myage = 30
//(var修饰的可以被改变)
//myage = 20
//print(myage)
////swift 定义变量或者常量时候,需标识出变量或者常量的类型如果没有,那么编译器会自动推断类型//let name = "duke"
//会自动推断为string类型,决定后面的值来决定name的类型//
//let name : String = "duke" 由前面类型string来决定后面付什么值,后面要和前面类型一致
//let age:Int = 30
//如果使用了let修饰,必须付初值.如果是使用var修饰可以不用赋初值;
//var age1: Int?
//?好表示当前age1是可选类型其值可以为空
//print("----",age1)
////定义一个字符类型的变量
//var char:Character = "A"
//此时char就是一个字符,其值也是用""括起来,只能放一个字符
////定义一个bool类型的变量(值只有ture和false)
//var flag:Bool = true/*** 字符串string ***
///(1)创建一个空字符串变量//var str_empty = ""
//var str1_empty = String()
////(2)通过字符串对象的isempty方法判断是否为空
//if str_empty.isEmpty{//if后面的判断条件(表达式,方法..)的返回值,必须是bool类型,不再用括号;
// print("str_empty is empty")
// //}
////字符串的拼接var str_city = "西安"var str_class = "ios 8班"let classname = str_city + str_class
//拼接用+号来拼接print("我们是:\(classname)")
//插入式取值print("我们是:",classname)
////(4)获取字符串的长度
//var str1:String = "abc"
//print(str1.characters.count)
////(5)字符串比较
//let str2 = "张凡"
//let str3 = "张凡"//if str2 != str3{
// print("两个不相等")
//}/***数组(array) ***
///swift中的数组里面存储的所有数据都必须是同一种类型的,如果需要使用不同类型的数据可以使用OC的NSarray
//定义一个数组变量
//var namearray = ["张凡","张恒","张华"]
//print(namearray)
//var nameArray1:Array= ["张凡","张恒","张华"]
//print(nameArray1)
////定义一个空数组变量
//var array_empty:Array= Array()
//var array1_empty = Array()
//定义一个字符串类型的空数组
//var int_array = [Int]()
//定义一个整形空数组
//print(array_empty)
//print(array1_empty)
//print(int_array)
////访问数组中的某个元素
//print("第二个元素:\(namearray[1])")
////向数组中添加一个元素
//int_array.append(10)
//int_array.append(20)
//print(int_array)
////使用运算符向数组中添加一个元素
//int_array += [30]//print(int_array)
////使用运算符徐昂数组中添加多个元素
//int_array += [40,50,60]
//print(int_array)
////在数组中某个位置插入一个元素
//int_array.insert(5, atIndex: 0)
//print(int_array[0])
//////移除某个位置上元素
//int_array.removeAtIndex(0)
//print(int_array)
////移除所有元素
//int_array.removeAll()
//print(int_array)/***字典 ******************************************
///var dic1:Dictionary= ["a":10,"b":20]//print(dic1)
//var dic2_empty:Dictionary= Dictionary()
//print(dic2_empty)//var dic2:Dictionary= [:]
//var dic3 = Dictionary()
////向字典中添加键值对
//dic1["c"] = 30
////修改字典中的某个值
//dic1["a"] = 50
////删除字典中的一个键值对
//dic1.removeValueForKey("a")
//print(dic1)
/**************///// 元祖////***********/
//定义一个元祖 元祖:可以存放多种不同类型的元祖
//方法一:直接初始化.通过隐式类型推断每一个元素的类型
//let status = ("蓝鸥8班",["ios","html"])
//print(status)
////方法二:显示标识类型
//let status2:(String,Array) = ("蓝鸥8班",["IOS","HTML"])
//print(status2)
////取出元祖中的值得方法
////方法一:直接赋值给常量,并通过使用标记名来获取对应的值
//let status_info:(className:String,course:Array) = status
//print(status_info.className)
//print(status_info.course[0])
////方法二:直接通过下标获取元素的值
//var string = status.0+status.1[0]+status.1[1]
//print(string)
/***************循环*/
//第一种形式
//for var i = 1 ; i<10 ; i++ {
// print(i)
//
//}
//第二种形式
//for i in 1..<10 {
// print(i)
//}
//for i in 1...10{
// print(i)
//}
//while 循环
//var i = 5
//while i>0{
// i-=1
// print(i)
//}
//repeat while
//repeat{
// print("repeat while")
//
//}while i<0
//
////使用for循环遍历字典
//var animalsdic = ["dog":"🐶","pig":"🐷"]
//for (key,value) in animalsdic{
// print("key = \(key),value =\(value)")
//}
////用for循环遍历数组
//var animasNane = ["dog","pig","cat","fish","duck","tiger","cow"]
//for name in animasNane{
// print(name)
//}
/*练习题 //创建一个存储学生信息的字典,里面的key值包含学号、姓名、性别、年龄。
//创建一个学生的数组,将存储该学生信息的字典存入到数组中。
//创建一个元组,将上述两道练习题中的字典和数组放到新的元组中,并打印输出。
var studentdic = ["学号":1,"姓名":"国栋","性别":"man","age":22]
print(studentdic)
var studentarray = [studentdic,studentdic]
print(studentarray)
var yz = (studentdic,studentarray)
print(yz)*/
//********分支结构*******/
// if结构
//let flag = true
//if flag == true {
// print("true")
//}else{
// print("false")
//}
//
////switch case 特点:switch实现贯穿,使用关键字fallthrough
//let value = 0
//switch value{
//case 0:
// print("0")
// fallthrough
//case 1:
// print("1")
//case 2:
// print("2")
//default:
// print("other")
//}
////特点2 :case后面可以是一个范围
//switch value {
//case 0..<10:
// print("范围在0到10之间")
//case 10...100:
// print("范围在10-100之间")
//default:
// print("其他")
//}
//
////特点三 :case后面可以定义一个变量(let var都可以)
//switch value {
//case var i where value>=0 && value<10:
// i=20
// print(i)
//default:
// print("other")
// }
//
////特点4: case后面跟元祖
//let point = (10,10)
//switch point {
//case (_,10): //下划线表示任意值
// print("case1")
//case (10,0):
// print("case2")
//case (10,10):
// print("case3")
//default:
// print("other")
//
//}
/******************枚举*******/
//原始类型是INT类型的枚举
//enum Direction:Int {
// case east = 0
// case west = 1
// case south = 2
// case north = 3
//}
//print(Direction.east.rawValue)
//print(Direction.west.rawValue)//rawvalue打印原始值
//print(Direction.south.rawValue)
//print(Direction.north.rawValue)
////原始类型是string类型的枚举
//enum season:String {
// case spring = "春天"
// case sumer = "夏天"
// case winter = "冬天"
//
//}
//print(season.spring.rawValue)
//
//let dir = Direction(rawValue: 2) //表示取得是原始值为2的那个枚举(south)
//print(dir!)//加感叹号表示肯定有值
/*********************函数************************/
//表示函数的关键字 func
//如果要重写父类的方法. 那么需要在前面加override
//1.无返回值,无参数的函数
//func func1() -> Void {
// print("无返回值,无参数")
//}
//func func1() {
// print("无返回值,无参数")
//}
//
//func1()
//
////2.无返回值有参数
//func function2(str str:String) {
// print(str)
//}
//function2(str: "蓝鸥")
//有返回值,无参数
//func func3() ->String {
// return "国栋"
//}
// //print(func3())
////有返回值有参数
//
//func func4(a a:Int,b:Int) ->Int {
// return a+b
//}
// print( func4(a: 2, b: 3))
////5.返回值为元祖类型 (利用元祖实现多个值)
//func func5(a a:Int,_ b:Int) ->(Int, Int, Int) {
// return (a+b,a-b,a*b)
//}
//print(func5(a: 3, 2))
/********************inout*****************/
//参数默认是常量 let
//在参数前面添加var修改就可以修改
//如果参数使用inout来修饰就成了输出参数,在函数内部修改参数,可以影响外部变量的值
//func test(inout name:String) {
// name = "张华"
// print(name)
//}
//var strname = "许仙"
//test(&strname )
//
////函数嵌套
//
//func test1(){
// func test2(){
// func test3(){
// print("test3")
// }
// test3()
// print("test2")
// }
// test2()
// print("test1")
//}
//test1()