swift 高级用法

// 高级用法 (面试)
// 可选类型 值绑定(可选类型结合 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")
    fallthrough
case 6...100:
    print("大于5小于100")
    fallthrough
case 5:
    print("5")
    fallthrough
default:
    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 = 0
while 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)

// ***开发中
// 原始值
// 指定枚举值的类型 Int
enum 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
// 调用 jonerFunc
jonerFunc("qiong")
// *多个参数
func printPersonInfo(name:String,age:Int) {
    print("name = \(name), age = \(age)")
}
printPersonInfo("joner", age: 23)

// 3.有返回值, 无参数

// 4.有返回值, 有参数
// 函数类型 (String)->String
func 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 = 94
swapTwoNumber(&aa, b: &bb)
print("aa = \(aa),bb = \(bb)")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值