美文网首页
7.25 元组,defer延时执行,Any,inout,自动封

7.25 元组,defer延时执行,Any,inout,自动封

作者: jayck | 来源:发表于2016-07-25 20:02 被阅读19次

元组


let a = (1, 2, 3)

print(a.1)        //打印第二位的值

var arr = [1, 2, 3, 4, 5, 6]
print(arr)        //打印数组里面的所有值

func b() -> (Int, Int, Int) {
    return(22, 33, 44)
}

var (e, f, g) = b()       //把e,f,g分别赋给b()里面的值
print(e, f, g)

defer 延时执行


func delayCall() {
    var i = 0
    
    defer {
        print("first defer", i)     //第四执行
        
    }
    
    i = 1
    
    defer {
        print("second defer", i)    //第三执行
    }
    
    i = 2
    print("first", i)           //第一执行
    print("second")             //第二执行
}
print(delayCall())

Any 任意类型


var arc = [Any]()         //根据后面调用的值,自动转换类型
arc.append(1)
arc.append(2.0)
arc.append("abc")
print(arc)
//as 不能改变数据的类型,只能明确类型(确认)
var a1: Double = arc[1] as! Double     //a1等于上面arc第二位的值
let b1 = a1 + 2                        //2.0 + 2 = 4.0
print(b1)                              //打印出 4.0

@autuclosure 自动封包

func executeClosure(@autoclosure c: () -> Bool) {
    if c() {
        print("1 > 2")
    }
    else {
        print("1 < 2")
    }
}

executeClosure(1 > 3)

//inout  函数里面改变函数外面的变量

var (y, z) = (1, 2)

func swapAB(inout a: Int, inout b:Int) {
    (y, z) = (z, y)
}
//inout类型的参数,只能传递变量,并且需要加符号 &
//可以在函数里面修改函数的参数,同事影响外面的变量
swapAB(&y, b:&z)

print(y, z)

lazy 懒加载

第一次使用时才加载初识化值

//新建一个文件 Animal
class Animal {
    //1. 必须要第一次使用时才执行
    //2. 只会执行一次
    lazy var name: String = {
        print("正在初始化")
        return "abc"
    }()       //记得还有个小括号
}

let Ani01 = Animal()    //赋值
print(Ani01.name)      //调用,打印Ani01的名字,显示"正在初始化","abc"
print(Ani01.name)      //第二次打印(使用时)不再显示"正在初始化"

泛型 <>

//函数泛型/模板函数 占位符


func printV<V>(a: V) {
    print(a)
}

printV(1.3)       //printV(a: Double)
printV("aaa")     //printV(a: String)

泛型类,模板类 class <>

先进后出,先存的数据后取出来

class Stack<T> {
    var container = [T]()
    
    func push(a: T) {
        container.append(a)
    }
    
    func pop() -> T {
        return container.removeLast()
    }
}

//let arr = Array<Int>()

let s = Stack<Int>()
s.push(234)           //存入值 234
s.push(35)            //存入值35

print(s.pop())       //先存的后取,所以这里打印的是35
print(s.pop())       //这里打印的是234

let ss = Stack<String>()
//ss.container

相关文章

  • 7.25 元组,defer延时执行,Any,inout,自动封

    元组 defer 延时执行 Any 任意类型 @autuclosure 自动封包 lazy 懒加载 第一次...

  • 日常随笔第十一弹-杂项

    元组 defer 形成一个延迟执行的操作,遵循后添先执行 autoclosure 自动将函数中的语句形成一个闭包 ...

  • script标签

    defer: 延时脚步 下载完成 脚本会在 后 按照延时脚本的先后顺序执行。 async: 异步脚本 下载完成...

  • Go语言学习笔记08.defer

    defer defer可以说是go的一个很牛逼的功能了,将函数暂存,延时执行。defer语句只能出现在函数或方法的...

  • 023defer延时执行

  • ITV集合

    关键词defer的用法?答案:defer的字面意思是延时执行,在swift中修饰一个block,该block内的代...

  • go defer易错知识总结

    目录 defer执行时机 defer执行顺序 defer与return谁先谁后 函数包含多个Panic,defer...

  • Python中的any()和all()

    any() any()函数采用iterable作为参数: any(iterable) 。 迭代器可以是列表,元组或...

  • Go Defer

    Go Defer 如果函数里面有多条defer指令,他们的执行顺序是反序,即后定义的defer先执行。 defer...

  • Swift中defer的使用

    defer:defer中的代码将延迟至当前作用域结束之前执行注意:必须有执行到defer,才会触发defer。如果...

网友评论

      本文标题:7.25 元组,defer延时执行,Any,inout,自动封

      本文链接:https://www.haomeiwen.com/subject/pgxnjttx.html