Swift中闭包,懒加载,单例的写法区别

对比分析Objective_C和Swift懒加载的区别 iOS开发中懒加载(延迟加载)在OC和Swift中区别 阅读详情

闭包

闭包的参数和返回值都写在大括号里面,以”in”分隔开闭包内的代码块,如果闭包的参数和返回值都为空的话,”()->() in”就可以省略,下面是几种常见的闭包写法:

最简单的闭包:
//声明一个无参数无返回值的闭包,省略了参数返回值语句
    let simpleClosure = {
        print("呵呵")
    }
    //调用闭包
    simpleClosure()

有参数的闭包声明方法:

方式1

    let callback = { (result: String) -> () in
        print("数据请完成,回调了,数据是 \(result)")
        // 更新 UI
    }

方式2,最外层括号可以前移到闭包名后面

    loadData() { (result) -> () in
        print("数据=\(result)")
    }

方式3

    loadData({ (result) -> () in
        print("数据=\(result)")
    })

懒加载:

在 Swift 中,懒加载本质就是一个闭包,在前面加上lazy关键字,
在需要这个属性的时候,会执行后面的闭包,并且把闭包的返回值记录下来,下次再次使用这个属性的时候,直接返回

懒加载的几种写法:

1.常用写法,可以在懒加载的同时对对象设置一些值

lazy var person: Person = {
    // 初始化 person 并且返回
    let p = Person()
    p.name = "老王"
    print("我要起飞了...")
    return p
}()

2.懒加载最简单的写法

lazy var person3: Person = Person()

3.测试代码,仅供参考

lazy var person2: Person = self.personFunc()

let personFunc = { () -> Person in
    print("我继续起飞~~")
    return Person()
}
把方法3改造一下:
 lazy var person2: Person = { () -> Person in
    print("我继续起飞~~")
    return Person()
}()  

怎么样,是不是眼熟了许多呢~~~

单例

1.常用写法

// 在方法内部不能使用 static 修饰变量
static var onceToken: dispatch_once_t = 0
static var instance: HMSoundTools?
// 在 Swift 单例与懒加载格式差不多
// 把懒加载的 lazy var 改成 static let
static let sharedTools2: HMSoundTools = {
    let instance = HMSoundTools()
    return instance
}()

2.模仿 OC写法

static var onceToken: dispatch_once_t = 0
static var instance: HMSoundTools?
class func sharedTools() -> HMSoundTools {
dispatch_once(&onceToken) { () -> Void in
        instance = HMSoundTools()
    }
   return instance!
}

总结:懒加载与单例的实质都是”无参返回值是对象”的闭包,只不过是在定义闭包的同时就执行并返回对象了(大括号后面跟着的()语句),并且把返回值的类型提取到了等号的左边,可以对照懒加载写法1和单例的改造写法3仔细体会~

使用广播星历进行 GPS 卫星位置的计算 目录1.计算卫星运动的平均角速度 n2.计算观测瞬间卫星的近地点角3.计算偏近点角4.计算真近点角 f5.计算升交角距 6.计算摄动改正项7.进行摄动改正 8.计算卫星在轨道面坐标系中的位置9.计算观测瞬间升交点的经度 L10.计算卫星在瞬时地球坐标系中的位置11.计算卫星在协议地球坐标系中的位置使用广播星历进行GPS卫星位置的计算的详细步骤如下:关于在广播星历中各参数的分布情况可以参考下图:首先根据广播星历中给出的参数 计算参考时刻(TOE) 的平均角速度 式中,GM为万有引力常数 G 与地球总质量 阅读详情

相关推荐

NXP S32K3 Safety软件生态全解析:RTD、SPD、SAF、SCST到底怎么选?

本文深入解析NXP S32K3系列MCU的安全软件生态,详细对比RTD、SPD、SAF和SCST四大组件的功能定位与选型策略。针对不同ASIL等级需求,提供从架构设计到工程实践的完整解决方案,帮助开发者高效实现功能安全认证,优化汽车电子系统的安全性与可靠性。

weixin_42524226的博客 323

Swift的懒加载与闭包

闭包 闭包和OC中的Block非常相似,OC中的block类似于匿名函数,闭包是用来定义函数,他们的作用都是 保存一段代码,在需要的时候执行。 // oc 中的block void (^myblock)(int a,int b); myblock = ^(int a,int b){ // ... } // swift 闭包 { (参数) -> 返回值类型 in 执行语句 } { (parameters) -> returnType

More reading and learning to become excellent 397

关于旋转矩阵的左乘与右乘问题

最近在阅读框架源码时被旋转矩阵左乘右乘绕的云里雾里,故写下一篇记录一下,以防自己不长记性。

菜鸡正在学习 1万+

单例模式 懒加载终极写法 静态内部类写法

话不多说,先上代码 public class LazySingleton { private LazySingleton (){ if(LazyHandler.LAZY!=null){ throw new RuntimeException("单例模式不允许出现多例"); } } private static class LazyHandler{ private static final LazySingl

qq_31333217的博客 523

从Microchip SDK到STM32实战:手把手教你移植LAN9252 EtherCAT从站驱动(含EEPROM配置避坑)

本文详细介绍了如何将Microchip SDK中的LAN9252 EtherCAT从站驱动移植到STM32F407平台,包括FSMC接口配置、中断处理适配和EEPROM配置等关键步骤。通过实战指南和避坑技巧,帮助开发者快速实现高性能EtherCAT从站设备的开发,适用于工业自动化领域。

weixin_29197835的博客 446

别让PEX和后仿真拖后腿:Calibre与Virtuoso ADE联调的那些‘坑’与最佳实践

本文深入探讨了Calibre与Virtuoso ADE在PEX寄生参数提取和后仿真联调中的常见问题与解决方案。针对DRC/LVS验证通过后出现的网表导入错误和仿真波形异常,提供了七大典型场景的实战经验,包括PEX提取模式选择、CalibreView生成细节、环境变量配置等关键环节的最佳实践,助力工程师高效完成芯片设计验证。

weixin_33695450的博客 393

swift -- 单例+ lazy懒加载 + 第三方库

//工具类单例 static let goods : NHGoods = { let good = NHGoods() return good }() //懒加载 lazy var registerBtn: UIButton = { var btn = UIButton.init(frame...

weixin_34014277的博客 196

1.2 Spring AI V1.1.2版本 架构全景:模块拆解与设计哲学

Override// 检查请求的 Token 数量throw new TokenLimitExceededException("请求超出 Token 限制");@Override// 记录实际消耗的 Token@Override// 最先执行// 接口// 不同实现// 使用方无需改变定义抽象,保证可移植性提供 Fluent API,提升开发体验Advisor 机制提供扩展点,支持灵活定制模块化设计让你只引入需要的依赖自动配置。

小林夕程的博客 220

8.Swift单例的两种基本书写方式

/* -单例 写法格式 类似于我们懒加载 */ // 方式01 static let sharedTool:Person = Person() // 方式02 static let sharedTool1: Person = ...

chijiongyuan9948的博客 172

EMS案例:BMS传导发射超标整改案例

BMS作为新能源汽车的关键部件,其EMC性能直接影响整车的安全性和可靠性。本文通过一个实际的传导发射整改案例,详细展示了从问题定位、分析到解决方案实施的全过程。希望这些经验能够为从事类似产品设计的工程师提供有价值的参考,在未来的产品开发中避免类似问题,设计出更加可靠、稳定的BMS产品。EMC设计是一门结合理论与实践的艺术,只有通过不断积累经验、深入理解电磁场理论,并紧密结合实际应用场景,才能在复杂的电磁环境中设计出鲁棒性强的电子产品。

m0_56451176的博客 272

基于matlab的CNN物体识别物体分类系统

主要对物体进行识别,搭建一个物体分类系统本次实验选择规模稍大的 CIFAR-10 数据集进行分类识别,对应图像的大小设计 VggNet、ResNet 进行网络训练。在实际操作过程中,受限于数据规模和硬件配置,对于大小放缩、批次参数、训练步数等进行了多次调试,这也对以后的图像分类任务具有较高的参考意义,并通过对 CIFAR-10 数据集进行训练和评测,采用网络修改的方式来得到新的 CNN 结构,适用于对网络进行配置、融合等相关研究。读者可以通过自行设计或选择其他网络、加载其他数据等方式进行实验的延伸。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2006

Swift中final、extension、override、@objc等关键字的使用

1. final final关键字在大多数的编程语言中都存在,表示不允许对其修饰的内容进行继承或者重新操作。 Swift中,final关键字可以在class、func和var前修饰。 1.1 final正确的使用场景 - 权限控制 也就是说这个类或方法不希望被继承和重写,具体情况如下: (1)类或者方法的功能确实已经完备了 这种通常是一些辅助性质的工具类或者方法,特别那种只包含类方法而没有实例方法...

qq_28091923的博客 3242

LLC 谐振转换器中为什么需要 ( L_m )(励磁电感)

在每个模态中,励磁电感 ( L_m )、谐振电感 ( L_r ) 和谐振电容 ( C_r ) 分别承担着储存和释放能量、维持谐振电流和电压波形的任务。Q1和Q2的交替导通确保了这些元件能够在不同的模态下实现能量的有效传输和谐振状态的维持。励磁电感 ( L_m ) 在这一过程中起着不可或缺的作用,确保了电路的高效运行和稳定性。

weixin_43199439的博客 3654

swift懒加载以及只读属性

懒加载 在 iOS 开发中,懒加载是无处不在的 懒加载的格式如下: lazy var person: Person = { print("懒加载") return Person() }() 懒加载本质上是一个闭包 以上代码可以改写为以下格式 let personFunc = { () -> Person in ...

bangchang5197的博客 189

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Swift 懒加载(lazy) 和 Objective-C 懒加载的区别

Swift 懒加载(lazy) 和 Objective-C 懒加载的区别在程序设计中,我们经常会使用 懒加载 ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都会这样写 Objective-C - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSe

sheng_bin的博客 1035

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

objective-c和swift中懒加载的区别

oc中懒加载的写法就是,如果一个变量为空,则进行一定操作,否则return原来的值 - (NSString *)name { if(!_name) { _name = @"hello"; } return _name; } 而swift中只用写一个lazy标识符,swift中的懒加载只有第一次调用此变量时才执行闭包中的内容,不论是否为空,后面都不会执行了。 lazy var greeting: String? = { return "hello"

能饮一杯否 1798

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ios_swift 对比懒加载和普通赋值的区别

版权声明:本文为原创文章,未经博主允许不得转载。 http://blog.youkuaiyun.com/u_arenotalone 定义一个字符串的变量的方法:   [objc] view plaincopy //直接赋值   var str="JobDeer"   //闭包方式   var str:String={     return

u_AreNotAlone的博客 680

IOS_Swift_深入理解闭包 对比懒加载和普通赋值的区别

定义一个字符串的变量的方法:  //直接赋值 var str="JobDeer" //闭包方式 var str:String={ return "JobDeer" }() //简化闭包,省略了等号和括号: var str:String{ return "JobDeer" }//闭包中可以定义get、set方法。 var str:String{ get{ return "Jo

zimo2013的技术博客 5212

Swift 4.0学习之:懒加载

九: 懒加载 懒加载是一个在项目中特别常用的东西,在OC中,一般是通过重写getter方法来实现,但是在Swift里,多了一个叫 lazy 的修饰符,多么形象生动的命名。具体应用举例如下: //在Swift中只需要通过 “lazy” + “=” + “闭包” 就可以实现懒加载 lazy var dataList:[Any] = { //而且看这里,如果闭包是用来做懒加载的话,那么()-...

Zoneday的博客 3151

Swift3.0 -- 懒加载和OC的区别

OC的懒加载 #import "DemoViewController.h" @interface DemoViewController () @property (nonatomic, strong) UILabel *label; @end @implementation DemoViewController - (void)viewDidLoad { [super viewDi

viiimaus的博客 1413

php计算属性集的闭包,关于swift:计算属性与带闭包的属性集之间的区别

我是Swift的新手。 计算属性和设置为闭包的属性之间有什么区别? 我知道每次都会重新计算一个计算属性。 封盖是否有所不同? 即关闭:var pushBehavior: UIPushBehavior = {let lazilyCreatedPush = UIPushBehavior()lazilyCreatedPush.setAngle(50, magnitude: 50)return lazil...

weixin_39607710的博客 111

Swift4.0 学习笔记 第二十六节:Swift中懒加载和OC的区别

1.OC 的懒加载////  DemoViewController.m//  004-懒加载和OC的区别////  Created by 庄壮勇 on 2018/1/10.//  Copyright © 2018年 Personal. All rights reserved.//#import "DemoViewController.h"@interface DemoViewController

爲妳鎻愛的博客 603

Swift基础 懒加载 & 存储型属性 & 计算型属性

懒加载 swift中也有懒加载的方式 苹果的设计思想:希望所有的对象在使用时才真正加载到内存中 OC不同的是swift有专门的关键字来实现懒加载 lazy关键字可以用于定义某一个属性懒加载 懒加载的格式 lazy var 变量: 类型 = { 创建变量代码 }() 懒加载的使用 // 懒加载的本质是,在第一次使用的时候执行闭包,将闭包的返回值赋值给属性 /...

袭锐Code 548

Swift3.0--懒加载

// //  ViewController.swift import UIKit class ViewController: UIViewController { //初始化并且分配空间,会提前创建 //移动开发,延迟加载,减少内存消耗,就是懒加载 //懒加载 - lazy /** 1.能够延迟创建 2.能够解除解包的烦恼(最大的好处)

viiimaus的博客 1841

Swift 中计算型属性 和 懒加载 的区别

import UIKit class Person: NSObject { private var name: String?; /// 计算型属性 // 不会开辟`空间` 每次调用都会重新调用并`计算` // 类似一个特殊的函数(没有参数) var title1: String { return "

wang_gwei的博客 445

ios-Swift的只读属性和懒加载对比

在Swift中的只读属性可以这么写 var title1:String? { get { return "MM" + (opti ?? "") } }简写是这样的 var title2:String? { return "MR" + (opti ?? "") }还有种叫法叫做计算型属

rv0p111 829
上一篇: iOS开发~CocoaPods使用详细说明
下一篇: HTTP状态码
苍蓝残影
博客等级 码龄16年 4粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值