//
// main.swift
// SwiftLesson_1
//
// Created by wanghongfei2016 on 16/2/29.
// Copyright © 2016年 wanghongfei. All rights reserved.
//
import Foundation
//输出语句
print("Hello, World!")
//使用let定义一个常量,不能重新赋值
//Swift支持隐式类型推断 可以根据初值 自盾构的判断Swift的数据类型
//let a = 10
//print(a)
//
//let b : String = "nihao"
//
//let c = 20.1
//
////Swift 不支持隐式类型转换 不能让两个不一样的数据类型进行四则运算
////Swift 强转的格式:数据类型(需要转换的数据)
//
//let d = Double(a) + c
//
//let 迟到的 = "做俯卧撑"
//
//let = "哭"
//
//let 哭 = ""
//
//
//let str1 = "abcd"
//
//let str2 = "efg"
//
////Swift里面支持运算符的重载 会根据语境自动判断运算符的含义
//let str3 = str1 + str2
//
//print(str3)
//var a = 10
//a = 100
//如果需要定义一个初值为nil的变量的话 格式: var + 变量名 + ":" + 变量类型? = nil
//拆包
//var b : String? = nil
//let c : String? = nil //可以使用这样的语法但是因为不能改变值 所以没有意义
//本质区别 let定义的常量的内存地址不可改变 var定义的变量可以
/**********************数组************************/
//Swift 数组里面的数据类型必须是一样的
//let array = [2, 3, 4, "a"] // AnyObject Swift1.0版本 NSObject Swift2.0版本
//print(array)
//数组初始化的第二种方式 先制定数据类型
//let array1 : [Int] = [1, 3, 5]
//定义一个空数组
//let array2 : [Int] = []//不能添加值 没有意义
//var array3 = [1, 2, 4, 6]
//数组的增删改查
//print(array3[1])
//增
//array3.insert(10, atIndex: 2)
//
//print(array3)
//
//var array4 = [8, 9, 10]
//
//array3.insertContentsOf(array4, at: 3)
//
//print(array3)
//数组的删
//删除数组的同事,保存内存空间
//Swift里面的Bool是一个枚举,只有true和false两种参数
//array3.removeAll(keepCapacity: true)//
//let range : Range = Range(start: 2, end: 4)
//
//array3.removeRange(range)
//
//print(array3)
//改直接通过下标就可以了
//array3[2] = 100
//print(array3)
//拼接
//var array2 = [11, 12, 13]
//var array5 = array3 + array2
//print(array5)
/**************************字典***************************/
//let dictionary = [1 : 2, 3 : 4, "a" : "b"]
//
//
////Swift的字典里面 所有的key 所有的value都必须是同一种类型的
//let dictionary1 : [Int : String] = [1 : "a",2 : "b"]
//var dictionary = [1 : 2, 3 : 4, 5 : 6]
//print(dictionary)
//如果对一个不存在的key做赋值操作的话代表做增加的操作
//dictionary[1] = 100
//print(dictionary)
//如果对一个存在的key做赋值操作的话代表做修改的操作
//dictionary[7] = 200
//print(dictionary)
//删除
//dictionary.removeValueForKey(1)
//print(dictionary)
//查 根据key
//print(dictionary[5])
/***********************元组**************************/
//使用() 标示定义一个元组,元组里面没有数据类型的概念
//let type = ("罗峰", "DMH")
//
//print(type.0,type.1)
//
//
//let type2 : (name : String, nickName : String) = type
//
//
//print(type2.name)
/**************************循环结构***************************/
//
//let array = [1, 2, 3, 4, 5]
//
//for var c in array{
//print(c)
//
//}
//下面的循环 没有小括号也是可以的
//for(var i = 0; i < array.count; i++){
// print(array[i])
// print("i = (i)")
//
//}
//repeat while和while
//var b = 1
//repeat{
// b++
// print(b)
//}while b < 10
//
//
//var timer : String? = nil
//if timer != nil {
//print("timer存在")
//} else {
//print("timer不存在")
//}
//let value = 0
//switch value {
//case 0:
// print(value)
//
//case 1:
// print(value)
//default:
// print(value)
//
//}
//0...10 表示的是从0开始到10结束并且包含10
//0..<10 标示的是从0开始到10结束并且不包含10
//
//switch value {
//
//case 0...10:
// print(value)
//case 11...20:
// print(value)
//default:
// print("超了")
//
//}
//
//print(-2...10)
let point = (10, 10)
switch point {
case (10, 10):
print(point)
case (_, 10):
print(point)
case (10, _):
print(point)
default:
print(point)
}
let value = 0
let value1 = 100
switch value{
case 0 where value1 < 10:
print(value)
case 0 where value1 > 10:
print("正确")
default:
print("错误")
}
//无参无返回值
//无参有单个返回值
//无参有多个返回值
//有参无返回值
//有参有单个返回值
//有参有多个返回值
//inout函数
//嵌套函数
//无参 无返回值
//func(关键字)test(函数名)"()"(参数列表) ->Void(返回值类型)
//func test() -> Void {
//print("我是第一个函数")
//
//}
//test()
//无参 有返回值
//func test1() ->String {
//
//return "我是第二个函数,无参有返回值"
//
//}
//
//let str = test1()
//
//print(str)
//
//func test2() -> Array
//
//return [1, 2, 3]
//
//}
//返回一个OC数组
//func test3() -> NSArray {
//
//return [1, 2, "a", "b"]
//
//}
//有参数无返回值
//参数格式参数名 + ":" + 参数列表
//func test4(name : String, sex : String) -> Void {
//
//print("我叫(name),我的性别是(sex)")
//
//}
//
//test4("罗峰", sex: "未知")
//参数是一个数组格式 : 参数名 + ":" + Array<数据类型>
//func test5(array : Array
//
//print(array)
//}
//
//test5([2, 4, 6])
//有参数有返回值
func test6(i : Int) ->Int {
return i + 10
}
print(test6(5))
//func test7(dictionary : Dictionary<>)
//无参数 有多个返回值
//func test8() -> (String, String){
//return ("罗峰","15")
//
//}
//
//
//let type = test8()
//
//print(type.0)
func test9(name : String, gender : String) ->(String,String){
return(name, gender)
}
let type = test9("lufei", gender: "weihzi")
print(type)
//inout函数
//Swift函数里面的参数 默认使用let 修饰 是不可以更改的
//inout函数作用的参数可以修改 改后在外面可以使用
//func test10(inout number : Int){
//number = 100
//}
//var a = 5
//test10(&a)
//print(a)
//
//func test11(inout name : String, inout name2 : String){
//let temp = name
// name = name2
// name2 = temp
//
//}
//
//var name = "zhangsan"
//var name1 = "lisi"
//test11(&name, name2: &name1)
//print(name,name1)
//函数嵌套
//第一层
func test12(){
//第二层
func test13(){
//第三层
func test14(){
//第四层
func test15(){
//第五层
func test16(){
//第六层
func test17(){
}
}
}
}
}
}