iOS---初识Swift(一)
一、Swift简介
○ 2010年的夏天, 苹果公司的开发人员Chris Latten接到了一个特别的任务, 为OS X 和iOS平台开发下一代编程语言, 也就是Swift.
○ 苹果公司于2014年WWDC(苹果开发者大会) 发布的新开发语言Swift, 可与Objective-C共同运行于Mac OS和iOS平台, 用于搭建基于苹果平台的应用程序
○ 2015年的WWDC开发者大会上, 苹果公司推出了Swift2.0版本, 并且Swift完全开源
二、基本语法
//Swift中导入类库使用import, 不再使用<>或者""了 import Foundation //Swift中的输出语句:print print("Hello, World!") //MARK: - 定义常量、变量 //定义常量 (使用完第一次就不能修改值) let myGender = "女" //myGender = "男" //定义变量 var carName = "BMW" carName = "Audi" print(carName) //MARK: - 定义常量变量: 变量类型的隐式转换 //在swift中如果定义常量变量不给定相关的类型, 它会隐式转换成给定的初值类型 let name = "Jack" //如果这样定义出来一个常量, 它会隐式转换成String类型 let name1 : String = "Rose" //如果给定类型,后边赋值的时候需要根据类型进行赋值 let age : Int = 18 //如果定义常量最好给出初始化, 定义变量可以不给初始值 var age1 : Int? //?表示age1的类型 print(age1) //定义一个字符类型的变量 var char : Character = "A" //赋值字符类型的时候 仅需一个字母即可 //定义一个bool类型的变量 [在swift中bool类型的变量只有true活着false] var flag : Bool = false //MARK: - 字符串string //(1)创建一个空的字符串 var str_empty = "" var str1_empty = String() //(2)判断一个字符串为空字符串 if str_empty.isEmpty { print("str_empty is empty") } //(3)字符串的拼接 var str_url = "http://" var str = "www.baidu.com" let str_new_url = str_url + str print(str_new_url) print("百度网址:\(str_new_url)\n") // \(变量名)输出相关的内容[插入式取值] //(4)获取字符串的长度 var str1: String = "dag" print(str1.characters.count) //(5)字符串的比较 var str2 = "MBBoy" var str3 = "GBLW" if str2 != str3 { // == print("两个字符串不相等") } //MARK: - 数组 //Swift数组中的元素类型必须相同 //定义一个数组 var nameArray = ["yuanyuan", "GBLW", "WYW", ] print(nameArray) var nameArray1 : Array<String> = ["YaQian", "XQ", "FatZhou"] //定义一个空数组 (字符串) let array = Array<String>() print(array) //访问数组中的元素 print(nameArray[1]) //向数组中添加元素 var int_array = Array<Int>() int_array.append(520) int_array.append(123) print(int_array) //使用运算符添加数组元素 int_array += [100] int_array += [120] print(int_array) //使用运算符添加多个数组元素 int_array += [800, 900, 55] print(int_array) //插入元素到具体的位置 int_array.insert(521, atIndex: 1) print(int_array) //移除某个元素 int_array.removeAtIndex(4) print(int_array) //移除所有元素 int_array.removeAll() print(int_array) //MARK: - 字典 //定义一个字典类型的变量 var dic : Dictionary<String, Int> = ["a":18, "b":69, "c":38] print(dic) //定义空字典 var dic1 : Dictionary<String, Int> = [:] var dic2 = Dictionary<String, Int>() //往字典里赋值 dic["d"] = 50 print(dic) //修改字典中的内容 (根据键值修改) dic["a"] = 90 print(dic["a"]) //删除字典中的内容 (根据键值去删除) dic.removeValueForKey("b") print(dic) //MARK: - 元组 //定义一个元组 //方法一:直接初始化一个元素 (使用swift隐式转换的特点) let tuples = ("蓝鸥1班", ["iOS", "html5", "Android"]) print(tuples) //方法二:显式初始化的方式 let tuplesNew : (String,Array) = ("蓝鸥8班", ["iOS", "html5", "Android"]) print(tuplesNew) //取出元组 //第一种取值方式:直接把元组赋值给另外一个常量, 根据相关标记进行取值 let tuplesNew1 : (classroom:String, course:Array) = tuplesNew var classInfo = tuplesNew1.classroom + tuplesNew1.course[0] + tuplesNew1.course[1] + tuplesNew1.course[2] print(classInfo) //第二种方式:直接根据下标取值 var classInfoNew = tuplesNew1.0 + tuplesNew1.1[0] + tuplesNew1.1[1] + tuplesNew1.1[2] print(classInfoNew) //MARK: - 循环 //第一种形式: 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 = 8 while i > 0 { i-- print(i) } repeat { //先执行一次循环体, 再进行相关的循环 print("我爱你们") }while 1 < 0 //使用循环遍历数组 var animalArray = ["阿福", "pig", "cat", "tiger", "fish"] for animal in animalArray { print(animal) } //使用循环遍历字典 var animalDic = ["dog":"🐶", "pig":"🐷"] for (key,value) in animalDic { print("key = \(key),value = \(value)") } //MARK: - 分支结构 (if结构和switch格式) //if形式的 let flag1 = true if flag1 == true { print("11111") }else { print("你们,....") } //switch形式使用fallthrough实现贯穿每种可能 var value = 0 switch value { case 0: print("0") fallthrough case 10: print("10") fallthrough default: print("other") } //特点2:case后可以使用一个范围 switch value { case 0..<10: print("输出0-10之间的数值") case 10...100: print("输出10...100的数值") default: print("other") } //特点3: case后可以使用 (let和var修饰的常量或者变量) where是否满足某种条件 switch value { case var i where value >= 0 && value < 6: i = 99 print(i) default: print("other") } //特点4: case后还可以匹配一个元组 let point = (10,10) switch point { case (10,0): print("1111") case (10,8): print("2222") case (_,10): // _ 代表可以忽略某个元素 print("3333") case (10,10): print("4444") default: print("other") } //MARK: - 枚举(enum) //枚举原始类型为int类型 enum direction:Int { case east = 0 case south = 1 case west = 2 case north = 3 } print(direction.east.rawValue) //rawValue:找到相对应枚举的原始值 //枚举原始类型为String类型的 enum Season:String { case spring = "春天" case summer = "夏天" case autumn = "秋天" case winter = "冬天" } print(Season.autumn.rawValue) //根据原始值获取枚举的类型 print(direction(rawValue: 2)) //MARK: - 函数 //表示函数的关键字: func //函数的类型有: 四种 //1. 无返回值, 无参数 func function1() -> Void { print("无返回值, 无参数的") } function1() //2.无返回值, 有参数 func function2(name str:String) -> Void { print(str) } function2(name: "lanou") //3:有返回值, 无参数 func function3() -> String { return "zhatian" } print(function3()) //4.有返回值, 有参数 func function4(num1:Int,num2:Int) -> Int { return num1 + num2 } print(function4(5, num2: 6)) //函数的返回值为元组类型的 func function5(num1:Int,num2:Int) -> (Int,Int,Int) { return (num1 + num2, num1 - num2, num1 * num2) } print(function5(9, num2: 2)) //外部参数和内部参数 //first、second就叫做外部参数:在函数调用的时候回显示出来这两个名称 //one、two内部参数: 在函数内部使用的 //默认的情况下, 第一个外部参数在调用的时候不显示, 其余的均显示 func function6(first one:Int, second two:Int) { print((one,two)) } function6(first: 10, second: 2) //如果都不想显示外部参数:"_"的作用是忽略外部参数名 func function7(one:Int,_ two: Int) { print("忽略外部参数") } function7(8, 9) //函数的嵌套 func test1() { func test2() { func test3() { print("哈哈") } test3() } test2() print("........") } test1() /* //inout修饰的参数: 会改变所传参数的值 func test(inout name:String) { name = "MBBoy" print(name) } var myName = "yuanyuan" test(&myName) print(myName) */ //var修饰的参数: 不会修改所传参数的值 func admin(var name:String) { name = "MBBoy" print("name = \(name)") } var myName = "tianxin" print("myName = \(myName)") admin(myName) print("myName = \(myName)")