Swift -- 闭包
Swift -- 闭包
上官尘 发表于2年前
Swift -- 闭包
  • 发表于 2年前
  • 阅读 47
  • 收藏 0
  • 点赞 1
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: 这篇文章讲解Swift闭包的定义,参数,返回值还有闭包的循环引用等问题。

一:闭包的表达式

//闭包就是函数,是一种有特定格式的函数。常用于保存一段代码,用作回调,处理耗时操作等等
//闭包格式如下
//{ (参数) -> 返回值类型 in 执行的语句 }
//in是用来区分形参,返回值和执行代码

//调用函数
myname("sgc") { () -> () in
            print("执行回调")
        }
//也可以这样调用
myname("sgc",{ () -> () in
            print("执行回调")
        })
//闭包作为参数
func myname(name: String, finished: () -> ()){
        print(" my name = \(name)")//执行耗时操作
        finished()
    }
    /*闭包简写:
        1.如果没有参数, 没有返回值, in和in之前的东西可以省略
        2.如果闭包是函数的最后一个参数, 可以写在()后面  -- 尾随闭包
        3.如果只有一个闭包参数, 那么()也可以省略  -- 尾随闭包
        4.闭包写在参数列表中
        */

二:闭包返回值

 
   //调用createScrollView函数
   let sc = createScrollView({ () -> Int in
            return 15
            }) { (index) -> UILabel in
                let width = 50
                let label = UILabel()
                label.backgroundColor = UIColor.greenColor()
                label.textColor = UIColor.darkGrayColor()
                label.font = UIFont.systemFontOfSize(17)
                label.text = "text\(index)"
                label.frame = CGRect(x: index * width, y: 0, width: width, height: 44)
                return label
        }
        view.addSubview(sc)
        
    }
    
    
    
    
    
    //创建两个闭包参数,用来返回ScrollView的数量,和ScrollView上子view的类型
    func createScrollView(labelCount: ()->Int, viewWithIndex: (index:Int)->UILabel) -> UIScrollView{
        // 1.创建UIScrollView
        let sc = UIScrollView(frame: CGRect(x: 0, y: 100, width: 375, height: 44))
        
        let count = labelCount()//闭包返回的子view个数
        
        // 2.遍历创建UILabel
        for i in 0..<count{
            let label = viewWithIndex(index: i)//闭包返回的子view
            sc.addSubview(label)
            sc.contentSize = CGSize(width: CGFloat(count) * label.bounds.width, height: 44)
        }
        
        // 返回UIScrollView
        return sc
    }

三:循环引用的问题

   参照这篇文章: http://www.cocoachina.com/ios/20160224/15349.html



标签: Swift 闭包 返回值
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 6
博文 38
码字总数 9881
×
上官尘
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: