每日一问18——swift基础(04)及后续补充

swift中的闭包

闭包的定义

先回忆oc中的block语法,详细可以回顾每日一问01——block

/*返回类型 (^名字)(参数列表)*/

void (^Block)(int a)

而在swift中闭包类型的格式:

(参数列表)->(返回类型)
(num :Int) -> () //不填默认为void

我们可以指定任何参数或变量为闭包类型

var block : (()->())?
闭包的使用

我们模拟一个异步请求的过程,通过闭包将结果返回出来。

func loadData(_ callBack : @escaping (_ jsonData : String) ->()) -> Void {
        //发送异步请求
        DispatchQueue.global().async {
            Thread.sleep(forTimeInterval: 1.0)
            DispatchQueue.main.async {
                callBack("json 数据")
            }
        }
    }

外部调用该函数时的写法

httpTools?.loadData({ (jsonData : String) in
    print(jsonData)
})

当闭包是最后一个参数时,我们还有另外一种写法,叫尾随闭包

httpTools?.loadData() { (jsonData : String) in
       print(jsonData)
}

可以看到,实际上这种写法就是把{}代码块放在了函数调用后面。

解决循环引用

在swift中解决循环引用的写法非常简单,我们依然可以使用weak关键字,除此之外我们还可以使用unowned关键字,但需要注意使用unowned必须保证被声明的对象不被释放,否则会产生野指针

httpTools?.loadData({[weak self] (jsonData : String) in
    self?.view.backgroundColor = UIColor.red
    print(jsonData)
})

httpTools?.loadData({[unowned self] (jsonData : String) in
       self.view.backgroundColor = UIColor.red
       print(jsonData)
})

写法上,最简单就是在括弧最前面加上[关键字 object]来指定对象弱引用。

懒加载

与oc的设计理念相似,swift也希望开发使用懒加载的方式进行加载

  • 用到时再加载
  • 多次使用只加载一次
swift懒加载的格式
lazy var 变量: 类型 = 创建代码

lazy var 变量: 类型 ={创建变量代码}()

两种格式都能创建懒加载变量,区分在于格式二可以定义更多的创建步骤。例如

lazy var button : UIButton = UIButton() //创建基本的button对象

lazy var button : UIButton = {//为button设置更多内容
        let button = UIButton()
        button .setTitle("button", for: .normal)
        return button
    }()

.....待补充

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 8,559评论 3 25
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,329评论 4 61
  • Swift 简介 查看Swift当前版本 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X...
    mian小爬阅读 2,865评论 0 1
  • 数了数,化妆包里在用的唇部彩妆,足足七样。 真心觉得如果只能选用一件彩妆品,那一定是唇部的彩妆品,哪怕是真正的素颜...
    牛科夫司机夫人阅读 2,701评论 0 1
  • 如今都讲究跨界,各行各业也都有自己的圈子,会计律师事务所也不例外。相信很多人都听说过四大,只知道是全球高端企业,工...
    小小斜阅读 4,897评论 0 0