swift 高级用法

来源:互联网 发布:usb3.0端口电压 编辑:程序博客网 时间:2024/05/18 09:10
// 高级用法 (面试)// 可选类型 值绑定(可选类型结合 if-else 使用), 都要定义局部变量var bindingOptional:Int!// local生命周期 - if 结束// * 局部变量后面必须是可选类型, 其实判断的是可选类型是否为空, 当为空时,直接走 else, 都有值时,走 if,顺便完成局部变量的赋值,方便我们在 if 花括号中对局部变量的使用if var local = bindingOptional {    print("local = \(local)")} else {    print("值为空")}// switch - case// 1.switch 中, 功能更强大// 2.默认没有贯穿, fallthrough关键词为贯穿下面的内容, 就是在得到要的值后面还会输出下面的内容var switchNumber = 5// case 一定包含所有的情况, 如果情况不能都写完, 就用 default 代替switch switchNumber {case 0,1,2,3,4:    print("小于5")    fallthroughcase 6...100:    print("大于5小于100")    fallthroughcase 5:    print("5")    fallthroughdefault:    print("others")}// 高级用法(面试)// switch - case 值绑定// 把一个作为判断条件, 一个作为局部变量接受值// 利用系统的推断var (x,y) = (10, 0)switch (x,y) {case (var xValue, 0):    print("xValue = \(xValue)")case (0,var yValue):    print("yValue = \(yValue)")default:    print("位于坐标系内")}// 循环for var i = 0; i < 10; i++ {    print("i = \(i)")}// for - in循环for i in 1...10 {    print("i = \(i)")}// while 循环var whileNumber = 0while whileNumber < 10 {    print("whileNumber = \(whileNumber)")    whileNumber++}// repeat - while 循环// 先执行, 后判断repeat {    print("我能行")} while false// 标签语句// 应用场景: 循环嵌套// 准确的取消哪一个循环, 想取消哪一个循环, 就该哪一个循环取个标签joner: while true {    for var i = 0; i < 50; i++ {        print("i == \(i)")        if i == 5 {           break joner        }    }}// 枚举// 还是值类型enum Person {    case Shaoqiong    case Xiaoze    case Bowen}print(Person.Bowen.hashValue)// ***开发中// 原始值// 指定枚举值的类型 Intenum Fruit:Int {    case Apple    case Banana    case Orange}// 原始值, rawValue 就是原始值print(Fruit.Orange.rawValue)// 函数, 是一个引用类型// 函数其实就是OC当中的方法// 定义函数使用 func// 1.没返回值, 没参数// 注意:()里卖写的是参数列表, ->代表返回值// 函数的类型包括参数类型和返回值类型// eg.()->Void 整体是一个类型// 书写时:->Void 可以省func printStr()->Void {    print("hello world")}// 函数调用printStr()// 2.没返回值, 有参数// (String)->Void为函数类型func printPersonName(name:String) {    print("name = \(name)")}// 调用printPersonName("gangyun")// *常量var jonerFunc :(String)->Void = printPersonName// 调用 jonerFuncjonerFunc("qiong")// *多个参数func printPersonInfo(name:String,age:Int) {    print("name = \(name), age = \(age)")}printPersonInfo("joner", age: 23)// 3.有返回值, 无参数// 4.有返回值, 有参数// 函数类型 (String)->Stringfunc returnPersonName(name:String) ->String {    return name}var returnName =  returnPersonName("joner")print("returnName = \(returnName)")// 多个参数多个返回值, 借助元祖// (String,Int,Float)->(String,Int,Float)为函数类型func returnPersonInfo(name:String,age:Int, height:Float) ->(String,Int,Float) {    return (name,age, height)}// 接受:var (name,shaoqiongAge,height) =  returnPersonInfo("shaoqiong", age: 19, height: 160.0)print("name = \(name),shaoqiongAge = \(shaoqiongAge),height = \(height)")// *使用函数的注意事项// 1.参数在默认情况下是 let 类型, 是不能改变的,想改变的话,参数必须使用 var 修饰func changeBottleHeight(var height:Float) {    // 高度的改变    height += 49}// 2.// 封装交换两个值得函数, 想改变-用地址(加&, 关键字- inout), 因为其为值传递//当想要函数的交换, 影响外部值的时候, 变量的关键字-形参的关键字用 inout(输入输出关键字)func swapTwoNumber( inout a:Int, inout b:Int) {    // let tmp:Int = a;    var tmp:Int = 0    tmp = a    a = b    b = tmp}var aa = 49,bb = 94swapTwoNumber(&aa, b: &bb)print("aa = \(aa),bb = \(bb)")
0 0