// main.swift
// Swift初级(一)
// Created by on 15/11/2.
// Copyright © 2015年 All rights reserved.
//当需要导入类库的时候,使用import 类库名,不用再加<>或者""
//
import Foundation
print("Hello, World!")//在swift中,使用print输出
//1.定义常量(let)和变量(var)
//定义常量
let myGender = "男"//commond+ctrl+空格可添加表情
//myGender = "女" //因为myGender是用let修饰的
//定义变量
var carName = "BMW"
carName = "Audi" //因为carName是用var修饰的
//Swift定义变量或者常量的时候,需要标识出变量或者常量的类型,如果不标识,会根据初始值自动的推断。
let name = "Jack" //会自动推断为String,由后面的值来决定name的类型
//let name:String = "Jack"//由前面的类型String,决定后面赋什么类型的值.即后面值的类型要和String一致
let age:Int = 3 //注意:如果是使用let修饰,必须赋初值;如果是使用var修饰,可以不赋初值
var age1:Int? //'?'表示当前age1是可选类型,其值可以为空
print(age1)
//定义一个字符类型的变量
var char:Character = "A" //此时char就是一个字符,切记其值也是用""的,只能放一个字符
//定义一个Bool类型的变量(值只有true,flase)
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!!")
}
//(3).拼接字符串
var str_url = "http://"var
str = "www.lanou3g.com"
let urlString = str_url+strprint(urlString)
print("蓝鸥官网:\\(urlString)\\n")//插入式取值 \\(变量名)
//(4).获取字符串长度
var str1:String = "abc"
print(str1.characters.count)
//(5).字符串插值
let mul = 4
let content = "\\(mul)*2.5 = \\(Float(mul)*2.5)"
print(content)
//(6).字符串比较
let str2 = "xiaoxiao"
let str3 = "lanou"
if str2 != str3{ // ==
print("两个字符串不相等!!!")
}
/***********数组(Array)********/
//Swift的数组里面存储的所有数据 都必须是同一类型的。如果需要使用不同类型的,可以使用OC的数组
//定义一个数组变量
var nameArray = ["张三","李四","王五"]
var nameArray1:Array= ["张三","李四","王五"
]let array = Array() //定义一个字符串型空数组
var int_arr = [Int]() //定义一个整型空数组
//访问数组中某个元素
print("第二个元素\\(nameArray[1])")
print(nameArray[0])
//向数组中添加一个元素
var int_arr1 = [Int]()int_arr1.append(10)int_arr1.append(20)
// 使用运算符重载向数组中添加一个元素
int_arr += [1]// 使用运算符重载向数组中添加多个元素
int_arr += [1, 2, 3]print(int_arr1)//在数组中的某个位置,插入一个元素
int_arr1.insert(30, atIndex: 0)print(int_arr1)//移除数组中某个位置上的元素
int_arr1.removeAtIndex(2)print(int_arr1)//移除数组中所有元素
int_arr1.removeAll()print(int_arr1)
/***********字典(Dictionary)*******/
//定义一个字典变量var dictionary:Dictionary= ["a":10,"b":20]//定义个空字典变量var dictionary1:Dictionary= [:]var dictionary2 = Dictionary()
//向字典中添加一个键值对
dictionary["c"] = 30
print(dictionary)
//修改字典中某个键值对的值
dictionary["a"] = 50
print(dictionary["a"])
//删除字典中的一个键值对
dictionary.removeValueForKey("a")
print(dictionary)
/***************元组*****************/
//定义一个元组变量
//方法一:直接初始化一个元组,通过隐式类型推断确定每一个元素的类型
let status = ("蓝鸥1班",["iOS","Html5"])
//方法二:显示的标识出元素的类型
let statusNews:(String, Array) = ("蓝鸥1班",["iOS","Html5"])
//取出元祖中的值的方法:
//方法一:直接赋值给常量,并通过使用标记名来获取对应的值
let statu:(classroom:String,course:Array) = status
var classInfo = statu.classroom + statu.course[0] + statu.course[1]
print(classInfo)
//方法二:直接通过下标获取元素的值
var classInfos = statu.0 + statu.1[0] + statu.1[1]
print(classInfos)
print(classInfos)
status
/*************循环********/
//extension
//第一种形式:
for var i = 1; i<10;i++
{
print(i)
}
//第二种形式:
for number in 1..<10{
print(number)
}
//第三种形式:
for number in 1...10{
print(number)
}
//while,repeat...while
var i = 5
while i > 0{
i--
print(i)
}
repeat{ //先执行循环体,再判断条件
print("repeat...while")
}while 1<0
//使用for循环遍历数组
var animalsArray = ["dog","cat","tiger","pig"]
for a in animalsArray
{
print(a)
}
//使用for循环遍历字典
var animalsArray1 = ["dog":"","pig":""]
for (key,value) in animalsArray1{
print("key = \\(key),value = \\(value)")
}
/********分支结构(if...else,switch...case)******/
//if结构
let flag1 = true
if flag1 == true
{
print("flag=\\(flag1)")
}else{
print("flag=\\(flag1)")
}
//switch...case
//特点1: switch中实现贯穿,使用关键字fallthrough
let value = 0
switch value{
case 0:
print("0")
fallthrough
case 10:
print("10")
fallthrough
default:
print("Other")
}
//特点②: case后面可以是一个范围
switch value{
case 0..<10:
print("范围是在0..<10,不包括10")
case 10...100:
print("范围是在10...100,包括100")
default :
print("Other")
}
//特点③: case后面可以定义一个变量(let,var修饰都可以),where后面是定义这个变量需要满足的条件
switch value {
case var i where value>=0 && value<10:
i = 20
print(i)
default:
print("Other")
}
//特点4: switch...case可以匹配一个元组
let point = (10,10)
switch point{
case (_,10): // '_'代表忽略
print("case1") //默认带有break
case (10,0):
print("case2")
case (10,10):
print("case3")
default:
print("Other")
}
/*********枚举(enum)**********/
//原始类型是Int型的枚举
enum Direction:Int
{
case east = 0
case south = 1
case north = 2
case west = 3
}
print(Direction.east.rawValue) //rawValue打印原始值
//原始类型是String型的枚举
enum Season:String{
case spring = "春天"
case summer = "夏天"
case winter = "冬天"
}
print(Season.summer.rawValue)
//Direction(rawValue:2)表示:通过原始值2,获取一个枚举成员,这个成员的类型是Direction
//dir 类型为 Direction? 值为 Direction.north
let dir = Direction(rawValue: 2) //表示取的是原始值为2那个别名(north)
dir?.rawValue
print(dir)
print(Direction.south.rawValue)
/*********函数********/
//表示函数的关键字 func
//函数的类型分为:四种
//1.无返回值 无参
func function1() -> Void{
print("无返回值,无参")
}
function1()
//2.无返回值 有参
func function2(name str:String) ->Void{
print(str)
}
//function2("蓝鸥")
function2(name: "蓝鸥")
//3.有返回值无参
func function3() -> String{
return "Hello"
}
let string = function3()
print(string)
//4.有返回值有参
func function4(a:Int ,b:Int) ->Int
{
return a+b
}
let result = function4(3, b: 4)
print(result)
//5.函数的返回值为元组类型(利用元组实现函数返回多个值)
func sumMulMinus(number1:Int,_ number2:Int) ->(Int,Int,Int){
return(number1 + number2,number1 * number2,number1 - number2)
}
//
//sumMulMinus(5, number2: 2)
sumMulMinus(5, 2)
//内部参数和外部参数
//内部参数名:在函数内部使用的参数名称
//外部参数名:在函数调用时候,显示的参数名称
//默认情况下,函数的第一个参数,不显示外部参数名,其余参数,显示外部参数名,并且和内部参数名一致
func text(first one: Int,second two: Int){
print(one, two)
}
text(first: 10, second: 10)
//如果不想要显示外部参数名,使用“_”忽略掉
func text1(one : Int, _ two : Int) {
print(one, two)
}
text1(10, 20)
// inout参数
// 参数默认是常量:let
// 在参数前面添加var修改,就可以修改参数
// 如果参数使用inout来修饰,就成了输入输出参数,在函数内部修改参数,可以影响外部变量的值
func test8(inout name: String) {
name = "LIZE"
print(name)
}
var myName = "lize"
test8(&myName)
print("myName: " + myName)
// 参数前面用var修饰,修改参数
func test9(var name : String) {
name = "LIDAZE"
}
//函数嵌套
func test1(){
func test2(){
func test3(){
print("test3")
}
test3()
print("test2")
}
test2()
print("test1")
}
test1()