Swift的一些特点,重要概念和应用

从VASP数据到LAMMPS模拟:手把手教你用DeePMD-kit搭建Cr-Si-Fe合金势函数 本文详细介绍了使用DeePMD-kit从VASP数据构建Cr-Si-Fe合金深度势能模型的全流程,包括数据准备、模型训练、优化及LAMMPS集成。通过实战教程,帮助研究者掌握DeePMD-kit训练技巧,实现高精度分子动力学模拟,提升材料计算效率。 阅读详情
摘要:Swift发展已有一年多的时间,越来越多的开发者开始学习和使用这门语言,但在实际项目中的应用却还是比较少。本文作者从Swift的语义逻辑、易用性、语言特性、与Cocoa交互等全方位分享如何在实际工程中使用Swift开发。

优快云移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,或寻求近匠报道,请发送邮件至tangxy#youkuaiyun.com(请把#改成@)。


简介

Swift语言从WWDC2014发布开始,到现在已经发展了一年多时间,越来越多的开发者也开始学习和使用这门语言。但就我所了解的情况来看,在实际项目中Swift的应用还是比较少。开发者给它的评价也是褒贬不一,有的说它的安全性高,有的说它的特性多,有的说它的学习成本高,还有的说它是一个玩具语言不适合工程。其实这都很正常,因为一千个人眼中有一千个哈姆雷特,语言的喜好本身就是一件很主观的事情。具体这个语言怎么样,适不适合工程,需要每个人实践之后才能得出自己结论。

Swift的特点

支持Unicode


代码原生支持Unicode字符。不仅在字符串中,甚至变量名、函数名等都能直接使用Unicode字符。虽然看上去很强大,但似乎并没有什么用,应该没人喜欢在编程时不停的切换输入法吧?

安全的类型

采用严格的类型,并去掉了隐式类型转换:

 

隐式类型转换一直是一把双刃剑,虽然使用便利,但是可能引入一些很难调试的BUG,不容忽视。把隐式类型转换摘除,利大于弊。

从类型层面将空值nil隔离,使用时要求对空值进行处理:


严格的语义逻辑

 

Swift对C语系一些常见的语义逻辑漏洞进行了修改,比如if等条件限定为Bool类型,赋值“=”操作不再有返回值等(其实有,是Void,即空元组“()”)。虽然使用上没有之前那么方便和灵活,但这种改变能杜绝很大一部分的手误BUG,比如“==”写成“=”,还能避免一些偷懒所引入的很隐秘的坑,对程序的稳定性和程序员好习惯的培养有很大帮助。

易用性

沿用并完善了Objective-C的函数中缀调用方式,参数有了真正的名字,调用时带上参数名能让函数接口更容易理解,可读性更好:


优化了可变参数定义和使用方式:

 

在C语系中定义可变参数还需要va_list、va_start等,一段时间不用根本想不起来怎么写,还得上网查,而在Swift中只需要遍历一个数组就能取到所有参数,非常方便。

优化了控制流的使用:

 

Switch的case可以连写,而且加入了很多实用的匹配模式,比如匹配范围、元组、条件等,还可以自定义匹配模式,十分强大。另外分支默认是break方式,不像在C语言中,明知道90%的case都是要break的,还要强制写上。还有一个很好的优化就是加入了跳转标签,在多重循环间控制转移的时候更灵活了。

加入了很多实用语法糖,仅仅一个闭包就有这么多简写方式:

 

这些语法糖能节省大量的开发时间和代码量,使用得当也能让代码更清晰,可读性更好。当然如果滥用的话可能起反作用。

丰富的语言特性

Swift支持类、协议、继承、多态等面向对象的语言特性:

 

也有高级函数、闭包等函数式编程特性:

 

还有泛类型、泛函数、泛协议等泛型编程特性以及操作符自定义等新特性:

 

总之Swift加入了大量的流行语言特性,功能灵活、强大,但是语法点也增加了很多,导致语法学习难度增大,各位可以按需要进行有针对性的学习。


Swift的一些重要概念

值与引用

值与引用类型在某些情况下与我们的编程习惯可能会有些冲突,是Swift初学常遇到的一个坑。先看一个例子,定义两个数组arr1和arr2,arr2用arr1赋值:


修改arr2[0]后,发现arr1[0]并没有修改。由此可知在Swift中,Array类型是值类型。再来看看Array的实现方式。按住Command键点击Array类型,进入到Swift库,可以看到如下定义:

  

 

Array和Dictionary,包括Int、Set、Double等基本内建数据类型都是由struct及其实现的一组协议构成。由于struct类型是值类型,所以Swift中的基本内建类型都是值类型。由于是值类型,所以每次赋值或者传参的时候都会有个拷贝的过程。我们先来做个实验:

 

运行以上代码可以发现,在修改了arr[0]的情况下,赋值的时间是1783ms(模拟器下),而仅是读取的情况,赋值时间是0ms。这个结果说明值传递使用了写时拷贝(copy on write)技术,也就是说只要不修改存储的数据,副本和原值共享内存区域。因此我们在使用这些值类型的时候一般有一些原则:

  1. 尽量限制数据规模;
  2. 如果数据规模较大,尽量不用作赋值和传参;
  3. 如果需要赋值和传参,尽量定义为常量或后续不修改数据;
  4. 如果以上都不能避免,可以使用引用类型代替值类型,如 NSMutableArray等;

Optional

Optional可选类型是Swift的一个重要概念,也是初学者比较难理解的地方。我们经常能在阅读代码时看到下面这样的代码:


有问号有感叹号,放的位置不一样作用也不一样,用的时候搞不清什么时候该用哪个,只好跟着xcode提示走,掉进坑里也不知道。要搞清楚这个问题先要明白Optional是什么。在Swift库中可以找到Optional的定义:


Optional其实是个泛型枚举,定义时的类型比如 Int? 等价于 Optional<Int>。它实现了NilLiteralConvertible协议,所以能被nil字面量赋值。当可选类型用nil赋值时,nil被转化成None,当用非nil赋值时,转化为Some(T)。Some(T)这种形式叫做相关值(Associated Values),可以这么理解,这是一种名叫Some,能存放T类型的盒子,我给它赋的值就放在这个盒子里保存。

可选类型相当于对nil或实际的值做了封装,所以使用Optional时需要将实际的值从Some(T)中取出,这个过程就叫解可选(unwrap)。

先来看看问号定义的可选类型:

 

问号定义的可选类型就是普通的Optional,常用的解可选方式有三种,如上图所示。

  1. 先对opt进行判空,若不为空则用 opt! 进行强制解可选。“!”在这里的意思就是,我确定该值不为空,请直接取出实际值;
  2. 用if let unwrap = opt 来解可选。这是Swift为解可选做的语法糖,叫做可选绑定。如果opt为nil则进入else分支,若不为nil则将实际值提取到unwrap,然后进入if分支;
  3. 利用opt ?? 0解可选。“??”叫空合运算符(Nil Coalescing Operator),作用就是,如果opt为nil,表达式值取后面的默认值,否则表达式返回opt的实际值;

再来看看感叹号定义的可选类型:

 

感叹号定义的可选类型叫做隐式解可选类型。在概念上与问号定义的可选类型并没有什么区别,只是在使用形式上有些不同。

隐式解可选类型在用作右值时并不需要人为进行解可选,它默认由编译器进行强制解可选,相当于编译器自动在后面添加一个感叹号。这样在使用的时候就不用强制对空值进行处理,更方便一点,但是却十分危险,因为必须由人工保证opt_f在用到的地方必须不为nil,否则程序会crash。而人脑总不如机器保险,因此一般情况不建议使用隐式可选类型。

问号还有一种使用场景叫做可选链。先来看看这么一种情况:

 

我定义了一个Person类,类有father属性表示他的父亲,而孤儿可能不知道父亲是谁,因此father是个可选类型。现在来了一个需求,需要获取某个人曾祖父的名字,我们可能会写出如下代码:

 

看上去很不美观,写起来更费劲。针对这种情景,Swift做了优化,加入了可选链这种语法糖,上面的代码就能改写为:


用问号把方法调用或属性获取等连接起来,组成一条调用链。意思就是我不关心中间过程,只关心最后结果,如果中途任何环节返回了nil,就直接返回nil,否则返回最后结果。这样就能节省很多工作量,让代码看上去更美观,结构更清晰。需要注意的一点是,虽然name是确定的String类型,但是由于可选链上任一环节都可能返回nil,最后得到的是一个String?可选类型,所以还需要做一次解可选操作。



Swift的应用

与Cocoa交互

要用Swift写App首先需要了解的就是UI怎么写、系统功能怎么调用。由于Swift并没有重写系统功能库,只是对Cocoa进行了桥接,所以要调用系统功能就要与Cocoa的交互。Swift与Cocoa交互的细节非常多,但是并没有太大难度,因为Cocoa的使用与用Objective-C开发时没有太大不同,一般来说跟着Xcode的提示走基本都没有问题。需要注意的几点:


  1. Swift没有发消息这种方式,所有方法调用和属性访问都是用点操作, alloc、init桥接成了swift中的构造器,使用时直接用class实例化的方式即可。
  2. 一些常用类型在swift中都有对应,可以相互转换,通常情况建议使用swift的类型。
  3. Object-C中有些机制比如 KVO等在swift中不支持,如果要使用,需要带上@objc、dynamic等标记。


    多线程

    Swift语言本身并没有多线程支持,因此要使用多线程还是要调用NSThread、GCD等:


    此外,Object-C中一个很方便的代码互斥方式@synchronized在swift中不支持,因此要实现代码互斥需要自己使用锁。当然也可以模仿@synchronized自定义一个synchronized方法,利用尾部闭包造出原来的感觉:


    单例

    单例模式是移动开发中常见的一种模式,其一般要求是:

    1. 只初始化一次;
    2. 线程安全;

    在Object-C中单例通常是用dispatch_once来实现的,在Swift中同样可以这么做。但是由于Swift中支持全局变量、常量的lazy初始化,我们可以简化单例的实现:

    通过let定义单例实例常量来保证线程安全,通过全局常量的lazy初始化来保证单例只初始化一次。

    ARC

    Swift中的ARC原理与Object-C中一样,只不过在使用形式上有所不同。Swift中所有引用默认都是强引用,另外加入了两个ARC标记:

    • weak:类似Object-C的weak,弱引用,引用失效后引用自动赋值为nil;
    • unowned:类似Object-C中的unsafe_unretain,弱引用,引用失效后保留引用本身;

    由于weak引用在使用过程中可能变为nil,所以weak引用必须是可选类型(Optional)。另外Swift对闭包捕获的变量的标记做了优化:


    在Object-C中这种情况需要在闭包之外定义一个weak self,然后闭包捕获weak self。Swift中只需要把weak self写在闭包参数表之前的中括号中即可完成同样功能,这种方式代码结构更清晰,可读性更好。需要注意的是在闭包内self是weak的,是个可选类型,因此使用self时需要解可选。

    Delegate

    代理模式是开发中很常见的一种模式,它的实现原理与Object-C类似,也是通过协议来确定代理接口,用实现协议的实例来充当代理:


    不同的地方在于,Object-C中delegate是id类型的,而swift中协议是一种基本类型,delegate可以直接定义为协议类型,这样能让代理的职责更明确。要注意的地方是delegate是weak的,所以必须使用可选类型,而且weak标记的必须是引用,所以protocol必须打上class标记,表示该协议只能被class实现,这样协议类型才能当做引用类型使用。

    自定义操作符

    Swift中可以自定义操作符,自定义一个操作符需要两个要素:

    1. 操作符特性描述,包括:操作符位置 prefix、infix、postfix等,操作符的结合性left、right以及操作符的优先级;
    2. 操作符功能函数,参数和返回值需要与操作符特性一致,比如 prefix的操作符接受一个参数,返回一个值;

    比如我们可以定义一个笑脸操作符,他在字符串后面添加一个笑脸(^_^):


    函数式编程

    在Swift中,函数是first-class,也就是说函数可以作为参数传入也可以作为返回值返回,也可以给变量赋值。函数式编程是一种很强大、很灵活的思想,在Object-C中也有block等函数式编程思想,但并不明显,在Swift中这一点得到了强化。

    比如说可以实现一个函数工厂:

     

    泛型编程

    Swift中增加了泛型这个概念,泛型是一种很好的代码复用机制,用于将类型不同但实现相同的代码统一起来。泛型在Swift中应用非常广泛,你只要跳转到Swift的库文件就会发现类型、操作符、全局函数的定义中大量应用了泛型,因此不再做详细介绍。这里有一个小例子,利用操作符自定义、函数式和泛型在代码中实现管道机制:


    总结

    Swift有着更严格的类型和更规范的语义,针对容易造成BUG的点进行了优化,又加入了很多不错的语法糖,代码更简洁、更安全。它吸收了大量其他语言的优秀特性,可以实现一些强大灵活的设计模式,但也造成了其语法繁杂的缺点,增加了学习的难度。Swift本身的设计目标是高效、灵巧,但由于需要兼容Cocoa,导致其设计受到牵制,引入了一些有隐患的设计。由于这些特点,编写Swift代码其实很依赖IDE的辅助,但目前为止xcode的表现还不稳定,经常提示错误,再加上几乎每次xcode更新都伴随着Swift语法修改,Swift想要广泛应用于实际工程还有一段路要走,而Swift2.0的发布和Swift开源化,无疑将加快这个进程。



    SAP Integration Suite 与 SAP Cloud Integration 的关系解析 SAP Cloud Integration是SAP Integration Suite套件的核心组件,专注于消息与流程集成。两者关系可概括为:Integration Suite是SAP BTP上的集成平台套件(iPaaS),而Cloud Integration是其中负责应用与B2B集成的关键能力。日常所说的"CPI"实际指代的是Integration Suite中的Cloud Integration功能。该套件还包含API管理、事件网格等其他集成能力,共同构成企业集成解决方案。理解这一层 阅读详情

    相关推荐

    元数据及数据仓库相关概念

    文章目录元数据(metadata)的概念Data about Data定义技术元数据业务元数据总结数据仓库ODS简单的理解为 Operational Data Store, 运营数据仓储 数据整合层(也叫做数据缓冲层)EDW简单理解为 Enterprise Data Warehouse, 企业数据仓库ODS与EDW之间的差异使用角色数据来源数据获取性能和及时性数据架构数据共享能力数据系统提供应用数...

    frone的专栏 3137

    Swift简介

    转载请标明出处:[这里写链接内容] (http://blog.youkuaiyun.com/android_ls/article/details/51233743)一、神马是Swift? 1、Swift 是苹果公司2014 年在WWDC(苹果开发者大会)上发布的全新编程语言。 2、Swift在天朝翻译为“雨燕”,其Logo如下图 3、Swift跟Objective-C

    android_ls的专栏 2392

    用Python爬取公众号历史所有文章,看这篇就够了

    手把手教你爬取公众号历史所有文章

    u010522887的专栏 1万+

    swift 中“?”和“!”区别以及相关用法

    swift中?和!的区别

    u013302606的专栏 8328

    FPGA高速通信双核解析:CMAC与Interlaken硬核的实战对比

    本文深入对比了FPGA中两大高速通信硬核CMAC与Interlaken的核心差异与应用场景。CMAC作为标准以太网接入方案,适用于网卡、交换机等需对外互联的场景;而Interlaken则以极低延迟和高效通道化能力,专为芯片间、板间裸数据高速传输设计。文章通过实战案例与性能指标分析,为FPGA高速通信方案选型提供清晰指南。

    f9g0h的博客 843

    FPGA纯Verilog实现I²C主机控制器与EEPROM读写

    I²C是一种广泛应用的同步串行总线协议,用于连接微控制器与EEPROM、传感器等低速外设。其核心原理包括开漏结构、主从通信机制、START/STOP时序及ACK/NACK应答流程。技术价值在于硬件资源占用少、布线简洁、支持多从机扩展,特别适合FPGA嵌入式系统中轻量级外设控制。典型应用场景涵盖工业数据存储、配置参数持久化及实时传感器接口。本文基于Xilinx Spartan-6 FPGA,采用纯Verilog HDL实现参数化I²C主机控制器与AT24C02 EEPROM读写验证,深入解析状态机设计、SDA

    weixin_33557333的博客 119

    swift语言特性,swift语法介绍,swift使用技巧

    Swift语言是一种非常流行的编程语言,它具有许多特性和优点,使得它成为一种非常适合开发iOS、macOS、watchOS和tvOS应用程序的语言。Swift语言中的许多特性都是为了提高性能而设计的,这使得它成为一种非常适合开发高性能应用程序的语言。Swift语言中的许多常见任务都可以用更少的代码来完成,这使得代码更加易于阅读和维护。Swift语言是一种开放源代码的编程语言,这意味着任何人都可以查看和修改Swift的源代码。Swift语言中的函数是一段可重用的代码,它可以接受参数并返回值。

    GY的的专栏 2456

    SOME/IP协议详解「1.0·概述」

    主要讲解什么是someip,

    雪云飞星的博客 5367

    swift语言特点

    1、swift属于类型安全的语言,不同类型的数据不能直接相加,必须进行类型转换2、swift有可选类型的数据,可以是nil,也可以有值,避免了有特殊代码代替不存在,避免错误,这是swift的一大进步,不错。3、swift在有初值的情况下,不需要指定数据类型,系统会自动推断类型。4、swift必须用等式来标定判断,不能像c\c++那么自由,不等于0的就是真,同时等号没有返回值。5、swift里面bo...

    qq_15156403的博客 2594

    YOLOv13优化Faster_Block:卷积(Partial Convolution)、多层感知机(MLP)结构和残差连接

    Faster_Block 代表了现代深度学习中效率与性能平衡的一个典型案例。它通过部分卷积技术巧妙地减少了计算开销,同时通过精心设计的架构保持了强大的特征学习能力。这种设计思想对于移动端部署、实时应用和大规模模型训练都具有重要意义。 未来的发展方向可能包括更智能的动态分割策略、与新兴硬件的深度适配,以及与其他先进技术(如自注意力机制、神经架构搜索等)的结合。Faster_Block 的成功展示了在深度学习领域,创新往往来自于对问题本质的深刻理解和巧妙的工程实现。

    FJN110的博客 427

    第67步 时间序列建模实战:ARIMA建模(Stata)

    第67步 时间序列建模实战:ARIMA建模(Stata)

    Jet4505的博客 6819

    什么是‌‌‌‌‌‌Swift,有什么特点?

    Swift是苹果公司于 2014 年推出的编程语言,旨在替代 Objective-C 成为 iOS、iPadOS、macOS、watchOS 和 tvOS 应用开发的主要语言。Swift 结合了 C 和 Objective-C 的优点,同时去除了 C 的兼容性限制,提供了一种更现代、更安全、更高效的编程方式。

    小赵的博客 2288

    Arduino读取串口接收到的数据并发送数据

    Arduino读取串口接收到的数据并发送数据 源程序: void setup() { Serial.begin(115200); } void loop() { String comdata ; while (Serial.available() > 0) { comdata += char(Serial.read()); delay(2); } if (comdata.length() > 0) { Serial.print("串口接收到的数据:"); Serial.println(comd

    perseverance51博客 1万+

    Swift官方博客

    Swift官方博客 伴随着苹果在2014年WWDC上发布的新语言Swift,业界又掀起了一场“腥风血雨”。为了帮助各位开发人员快速掌握并使用这门新语言,苹果官方在开发者中心开通了Swift博客,用于解释和共享新资源。 转载于:https://www.cnblogs.com/dukedouglas/p/3874153.html...

    weixin_30739595的博客 158

    华为的C语言编程规范.pdf

    华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

    win10 跳过U8环境检测的IE WebControls.rar

    win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

    整理的学习swift的网站和资源

    http://letsswift.com/ http://www.yiibai.com/swift/ http://c.biancheng.net/cpp/swift/ http://wiki.jikexueyuan.com/project/swift/

    sillycat_m的博客 335

    IEM模型,地表粗糙度模拟

    利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

    Swift编程语言中文版教程---《The Swift Programming Language》

    http://www.chinaz.com/swift/ 转载于:https://www.cnblogs.com/simadi/p/3879023.html

    weixin_30699463的博客 52

    VB摄像头监控

    该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

    随手记Swift基础和Optional Type(问号?和感叹号!)

    距离Apple推出Swift已经有几天了,网上也时不时出现“急招Swift程序员,要求有一天工作经验”的帖子。看到Swift,除了苹果放的另外一门语言的链接(http://swift-lang.org/),还可能联想到Taylor Swift,或者铃木雨燕。这几天网上关于Swift的话题和材料应该迅速膨胀,比如StackOverflow的相关标签,还有知乎上的一些相关讨论。关于Swift的推出,我

    JasonLee的专栏 4万+

    Swift语言的区块链

    Swift是苹果公司于2014年推出的一种编程语言,旨在替代Objective-C,用于iOS、macOS、watchOS和tvOS应用的开发。Swift不仅具有面向对象编程的特性,还融入了函数式编程的理念,使得开发者能够以一种更加简洁和高效的方式来编写代码。Swift的核心特性包括类型安全、内存管理、模块化、以及支持并发编程等。区块链是一种分布式账本技术,它允许在没有中心化控制的情况下,安全地记录和共享数据。

    2501_90406602的博客 1522

    swift——optional

    optional optional是swift特有特征(oc没有),定义对象为optional表示对象可能有值,可能无值 optional:可能有值,可能无值 non-optional:任何时候都有值(即使值无意义),不存在无值 nil 在oc中,nil表示指针,指向不存在对象,只能赋值给指针对象 在swift中,nil表示optional无值,只能赋值给optional 注:未初始化optional默认为nil forced unwrap optional func forced_unwrap()

    mardax的专栏 441

    Swift语言的系统运维

    Swift是由苹果公司于2014年推出的一种编程语言,最初主要用于iOS和macOS应用的开发。相比于Objective-C,Swift更为简洁、安全和高效。随着Swift的不断发展,社区逐渐开始探索其在其他领域,包括系统运维中的应用。

    2501_90571217的博客 637

    Swift语言的强化学习

    强化学习是一种基于试错的学习方法,通过与环境的交互,智能体根据当前状态采取行动,以获得最大化的累积奖励。强化学习的核心在于智能体的学习过程,智能体需要在探索(exploration)和利用(exploitation)之间找到平衡。Swift是苹果公司于2014年发布的一种编程语言,旨在取代Objective-C,提供更安全、更高效的开发体验。易读性:Swift语法简洁,易于学习和使用。安全性:Swift内置多种安全特性,有效防止常见的编程错误。高性能:Swift编译器经过优化,能够生成高效的机器码。

    2501_91275982的博客 732

    Swift 中的闭包

    ####1.什么是闭包? ####   在苹果给出的官方文档上给出了这样的一段代码,我觉得对理解闭包有很大的帮助。 func returnFifteen() -> Int { var y = 10 func add() { y += 5 } add() return y } returnFifteen() ...

    1848倒计时 260

    《iOS移动开发从入门到精通》图书连载8:Swift的基本概念(上)

    Swift是Apple于2014年WWDC(苹果开发者大会)发布的全新开发语言,可与Objective-C共同运行于mac OS和iOS平台,用于搭建基于Apple平台的应用程序。

    互动教程网[www.hdjc8.com] 1508

    Swift

    兼具脚本语言,入门更加简单的语言 更加偏向人性化(英文)的编程语言 从2010年開始由克里斯负责开发,前期以GCC编译器为主,后期採用LLVM 6.0 OC诞生于1983年 Swift特点:兼容C Objective-C语言,安全高效而且交互性好,学习曲线平缓 能够不显示指定类型而编译器能够通过赋值来推断变量的类型.可是不支持隐式类型转换,即两种不同类型的变量之间不能够进行运...

    weixin_34273046的博客 108

    Swift语言的云计算

    Swift是一种多范式的编程语言,结合了面向对象编程和函数式编程的特点。它的设计目标是提高代码的安全性、可读性和性能。Swift的类型系统、内存管理和现代语法使其成为编写高效、可维护代码的理想选择。在移动应用开发中,Swift因其简洁的语法和强大的功能迅速赢得了开发者的青睐。然而,随着技术的发展,Swift的应用范围已经超出了iOS和macOS的开发,特别是在云计算领域。

    2501_90416990的博客 724

    探索设计模式的奥秘:Swift 中的经典实现

    探索设计模式的奥秘:Swift 中的经典实现 项目介绍 "Design Patterns in Swift" 是一个专注于在 Swift 语言中实现经典 GoF(Gang of Four)设计模式的仓库。该项目是 Refactoring.Guru 项目的一部分,旨在帮助开发者深入理解并应用这些设计模式。仓库中包含了所有经典设计模式的 Swift 示例,每个模式都有两个示例:一个...

    gitblog_00422的博客 723
    上一篇: UIView的layoutSubviews和drawRect方法何时调用
    下一篇: C++之友元
    Zmarvin
    博客等级 码龄12年 6粉丝 72原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

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

    抵扣说明:

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

    余额充值