iOS swift-3 (闭包)

本文详细介绍了Swift中的闭包使用方式,包括闭包的基本语法、如何将闭包作为函数参数传递,以及闭包在实际开发中的应用场景如数组操作等。此外,还探讨了类的概念、初始化过程和成员变量的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 闭包 。类似与OC中的block 反向传值  。引起代码的回调   闭包作为函数参数 condition 就相当于一个闭包

func hasClosureMathes(arr :[Int] ,value :Int ,condition:(num: Int ,value :Int)->Bool)->Bool{

    for item1 in arr{

        if condition(num: item1, value: value){

            return true

        }

}

    return false

}

//in 是闭包的一个标志  参数列表和返回值类型  in  闭包所要实现的代码块  func    in

var v1 = hasClosureMathes([2,11,10,10,5,5,3], value: 12) { (num, value) -> Bool in

    /*if*/ num > value

//    {

//        return true

//    }else{

//        return false

//    }

}

print(v1)

var v2 = hasClosureMathes([2,11,10,10,5,5,3], value: 1) { (num, value) -> Bool in

    if num < value{

        return true

    }else{

        return false

    }

}

print(v2)

// 定义一个数组里面 String类型的人名,判断数组里面是否有一个叫小美的人,如果有,返回"大家好,小美在这呢",如果没有 ,返回"咦,怎么找不到小美"

func hasClosure1Matches (nameArr : [String]  ,cb:(name1:String,xName : String )-> Bool) ->String {

    for name11 in nameArr{

        if cb(name1:name11, xName: "小美"){

          return   "大家好,小美在这呢"

        }

    }

    return "咦,怎么找不到小美"

}

var v3 = hasClosure1Matches(["luce","SuSan","张亮","小美"], cb: { (name1, xName) -> Bool in

    if name1 == xName {

        return true

    }

    return false

})

print(v3)


//如果闭包的代码宽里面只有一句代码的话,可以省掉if 和返回语句,只要判断就ok


var v4 = hasClosure1Matches(["luce","SuSan","张亮","小美"], cb: { (name1, xName) -> Bool in

     name1 == xName })

print(v3)


//$0表示闭包传进来的第一个参数。$1 表示闭包传进来的第二个参数。

var v5 = hasClosure1Matches(["luce","SuSan","张亮","小美"], cb:{

            $0 == $1

})

//  闭包在我们实际应用中都有哪些。

//数组的map 属性,  可以遍历数组,然后对其进行相应的操作


//泛型,比较抽象。他会根据你进行的操作做出判断给你返回相应的值。比如你进行+操作。他就返回 Int  的数组, 如果你进行> 判断  ,他就给你返回ture 或者是false的值

var numbers = [12,13,22,12,23]

let mapedNnumbers = numbers.map ({

    number in

    number > 10

})

print(mapedNnumbers)

//数组的sort方法、这个方法会自动遍历进行前后比较,如果 num1 < num2为真 就会返回这两个数,如果为假 ,就会返回这两个交换过得数,从而进行排序

//[12,13,22,12,23]

let sortedNumbers = numbers.sort({

//    (num1 : Int,num2 :Int)->Bool in

//    num1 < num2  //<  升序排序  > 降序

    $0 < $1

})

print(sortedNumbers)

// 总结一下函数作为参数和闭包的区别。

//  本质都是一样的,引起代码的回调。  只不过是,一个直接调用函数名。闭包是直接传入代码块

//在完整的闭包写法中。加入func 关键字,他就是一个函数。

//函数去掉func   加上 in 就变成了闭包。

//闭包可以省去参数列表和返回值,用$0  $1...去代替。而函数不可以。



// 类和对象   类的关键字 class

//类里面可以有常量,变量,和函数。(成员变量)每个变量都要赋初值

class Shape {

    var numberOfSides = 0

    let defultDiscription =  "这是一个形状"

    func simpleDiscription() ->String{

        return "the shape has \(numberOfSides) sides"

    }

}

//生成一个Shape类的对象  

//var  s = Shape()

//相当于我们OC 中的 Shape *s =[[Shape alloc ]init]  可以通过.去点到他们的实例变量和方法。

var  s = Shape()

print("s的边数为 \(s.numberOfSides),s 的简单描述\(s.simpleDiscription()),s的默认描述为\(s.defultDiscription)")


//每个变量都要赋初值   , 1 直接赋初值。  2. init方法

class NamedShape{

    var numberOfSides:Int

    var name :String

    //   在这里self是区分是否是成员变量。

    init(name:String,numberOfSides:Int){

        self.name = name

        self.numberOfSides = numberOfSides

    }

//    deinit{

//    叫做析构函数,和我们OC中的dealloc用法差不多。析构函数不能带参数的,每个类最多只有一个析构函数。作用是自动销毁不用的实例变量

//    里面写需要销毁的对象

//    }

    func simpleDiscription() ->String{

        return "\(name) has \(numberOfSides) sides"

    }

}

//声称对象时,类(初始化的参数)

 var ss = NamedShape(name: "有名字的形状", numberOfSides: 12)

print(ss.name)

print(ss.simpleDiscription())

print(ss.numberOfSides)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值