![](https://img-blog.csdnimg.cn/20200318111609570.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Swift 语言基础
文章平均质量分 82
Swift语言相关特性
Code&Ocean
遨游在编码海洋中。
iOS Developer
展开
-
Swift 注释和文档
今天,我知道我写是什么,上帝和我知道明天,我知道这个代码什么意思,后天,我知道这是我写的代码,一周后,这TM谁写的代码,此时只有上帝才知道啥意思论代码注释的重要性。原创 2023-04-20 17:09:29 · 1604 阅读 · 3 评论 -
iOS混编参考阅读
鉴于 Objective 已经打下了一大片江山,但是还是要将江山与 Swift 共享,所以就涉及到项目使用 Objective-C 和 Swift混编,如果让这两种语言更加相互融合,充分利用 Swift 的语言优势了。怎样让 Objective-C 更便利桥接给 Swift以下内容来源于师大小海腾–掘金,详情建议阅读原文,原文有许多举例和相关参考阅读。iOS 混编|为 Objective-C API 指定可空性关键词:nullable、nonull、null_resettable、null_rese转载 2021-11-23 15:58:54 · 1020 阅读 · 0 评论 -
利用扩展来约束泛型
利用扩展来约束泛型原文:Specialized extensions using generic type constraints将Swift强大的泛型系统与任何Swift类型都可以与新的API和功能扩展这一事实相结合,使我们能够编写有针对性的扩展,在类型或协议符合特定要求时有条件地向其添加新功能。这一切都从where关键字开始,它允许我们在一系列不同情况下应用泛型类型约束。在本文中,让我们看看该关键字如何应用于扩展,以及可以通过这样做解锁哪种模式。基于泛型类型限制扩展我们可以使用更具体的API扩翻译 2021-11-02 14:05:30 · 822 阅读 · 0 评论 -
Codable 基本使用
Codabel JSON转模官方文档:Using JSON with Custom TypesJSON 介绍:JavaScript Object NotationCodable 是 Swift 引入的全新的编解码库,使开发者更方便的解析JSON 或 plist 文件。支持枚举、结构体和类。协议定义如下:typealias Codable = Decodable & Encodablepublic protocol Decodable { public init(from dec原创 2021-10-27 14:29:29 · 2798 阅读 · 0 评论 -
Swift Property Wrapper 属性包装器
@propertyWrapper属性包装器:在定义存储属性时添加一个分离层,代表该属性被包装起来,且在包装器内部可以做一些事情。把一些通用复用的代码放在了包装器中,比如线程安全检查或者数据存储到数据库中。个人理解:简单定义的属性只能具备存储功能,供其他方法调用。而被属性包装器修饰的属性不仅具备存储能力,还可以具备计算型属性的能力(setter,与 getter),甚至还可以通过属性包装器存储更多变量或者方法。官方文档: Property Wrappers Property Wrappers 演化进程原创 2021-04-23 15:56:45 · 1638 阅读 · 0 评论 -
Swfit 常用特性(Attribute)关键字
Swfit 常用特性(Attribute)关键字Swift中的Attribute相当于Java中的注解,但是可惜的是目前Swift不支持自定义AttributeSwfit的特性关键字一般用于声明或者用于类型使用形式 @属性关键字 或者带参数@属性(参数)@availabel@available用来标识 计算属性(不包含储存属性)、函数、类、结构体、枚举等声明周期(依赖特定版本或者Swift语言版本)该特性总是以一个或者多个以下列表字段开始平台参数或Swift版本iOSiOSApplica原创 2021-03-18 15:48:08 · 713 阅读 · 0 评论 -
NSCoding 的作用
有时候我们在定义一个模型类的时候,经常要继承NSCoder这个协议,具体它有什么作用了?NSCoding首先是一个协议,类继承它,此类的实例才能被编码(encode)和译码(decode),继承了这个类,也就实现两个方法 1.initWithCoder(NSCoder:coder)//从coder中读取数据,保存到相应的变量中,即反序列化数据2.encodeWithCoder(NSC原创 2015-12-26 10:07:20 · 1745 阅读 · 0 评论 -
Swift 懒性属性
Swift 懒性属性及时求值与懒性求值及早求值:尽可能早的计算表达式的值,以便在使用时直接使用。懒性求值(Lazy evaluation):将代码中求值延迟到需要结果值时再进行。在一般的开发中,苹果希望我们以及早求值的方式进行编程,但是懒性加载可以提高性能和便利性,我们可以适当添加懒性求值。懒加载应用Objective-C 中的懒加载OC中是通过判断是否含有值,如果有就直接返回值,没有就创建对象返回。// ClassA.h@property (nonatomic, copy) NSStri原创 2020-09-29 10:58:53 · 400 阅读 · 0 评论 -
Swift字典Dictionary快速文档
Swift Dictionary字典简述字典就是通过Key - Value对应关系的数据结构。swift与OC字典区别 类型: Swift字典是值类型, OC字典类型为引用类型初始化方法你可以通过如下方式初始化字典。// 创建一个空字典init()// 创建一个最小容量为多少的字典, 一般在你知道接下来字典有多少数量时候使用,注意这里是最小容量,表示字典创建之后,可以超过这个数量,这个只是为了方便为其分配适量内存,避免频繁分配内存,达到内存优化。这个容量值和属性capacity不一定相等翻译 2020-05-12 15:30:07 · 1126 阅读 · 0 评论 -
避免在Swift Struct中使用闭包
为什么我们应该避免在结构体使用闭包我们所有人都喜欢闭包,你难道不喜欢吗? Closure能够让iOS开发者生活更轻松。如果它让我们更轻松了,那为啥我还要说不在在结构体中使用闭包了,原因就是:“内存泄露和发生不可预料的事”,你会不会有为啥Swift结构体会发生内存泄露问题的疑问?Swift 结构体是值类型,按道理不会发生内存泄露,事实真的如此吗?我们已经有很多疑问了,接下来我们看看Swift基本...翻译 2020-04-15 14:32:55 · 636 阅读 · 0 评论 -
Swift String字符串版本更新特性
var str = "Hello, playground"字符串,Swift最基本最常用的对象之一。Swift的基本使用,增删改查我们就不说了。基本字面量let hello = "Hello Swift"print("\(hello) 欢迎你")多行字符串let mutilStr = """我是多行字符串我这里定义多行比如json定义"""Swift 5.0 Strin...原创 2020-03-27 17:05:37 · 226 阅读 · 0 评论 -
Swfit 常用特性(Attribute)关键字
Swfit 常用特性(Attribute)关键字Swift中的Attribute相当于Java中的注解,但是可惜的是目前Swift不支持自定义AttributeSwfit的特性关键字一般用于声明或者用于类型使用形式 @属性关键字 或者带参数@属性(参数)@availabel@available用来标识 计算属性(不包含储存属性)、函数、类、结构体、枚举等声明周期(依赖特定版本或者Swif...原创 2020-03-04 11:49:17 · 972 阅读 · 0 评论 -
Swift JSON转模型Xcode插件
SwiftJSONModeler是一个Xcode插件,一键转换json字符串为Swfit模型,一键转化 YApi 平台接口为模型,并且自动引入注释。原创 2020-02-07 16:55:58 · 1084 阅读 · 0 评论 -
Swift typealias使用
阅读前了解知识点泛型文档中文版Swift改变日志,搜索关键字typealiastypealiastypealias是指类型别名,将一个已存在的类型别名一个其他名字,比如:// 我经常干的typealias NetParams = [String: Any] /// 网络请求参数// 系统Core Location 的经纬度类型public typealias CLLocation...原创 2020-01-08 11:52:46 · 1149 阅读 · 0 评论 -
ValueTransformer
ValueTransformer如其名,就是进行值转换的,将一个数据结构转换为另外的数据结构,比如当后台传入模型与显示模型存在较大差异时使用。ValueTransformer类介绍本身是一个抽象类,用来进行值转换,使用的时候需要继承创建子类实现其方法。转换器基本信息方法向外部传递基本的转换结果类型, 是否允许反转等,注意是类方法哟。 /// 转换输出类型类 open cla...原创 2020-01-07 14:20:38 · 528 阅读 · 0 评论 -
Swift 与 Objective-C混编xxx-Swift.h File not found
在iOS 开发中,由于苹果14年发布了Swift语言,具备简单实用、高效等诸多优点,越来越受开发者青睐。另外,由于Objective-C多年发展和稳定性,有很多框架(特别是商业SDK)采用Objective-C,或者之前的老项目使用Swift语言。都需要涉及到混编,才可以实现文件相互识别与引用。Swift中使用Objective-C重点文件:桥接文件如果创建项目选择的是Swfit...原创 2019-12-18 15:25:09 · 5638 阅读 · 0 评论 -
iOS 图片渲染及优化
下图是一张超美的太空图,如果我的项目中要使用这么一张图片,我该怎么显示和优化了(如何显示和优化大图显示)。图片资源原始网站:在这里假如这张图大小为:52kb图片显示流程1.加载 (数据缓冲区)图片通过网络请求或者本地加载到内存中,也可以称之为数据缓冲区,占用52kb(文件大小)。2.解码(图像缓冲区)解码是将图像转化为CPU能读取和理解的过程,同时将图像创建在图像缓...原创 2019-11-11 11:23:30 · 1780 阅读 · 0 评论 -
Swift extension 扩展实用Tips
extension基本功能Swift扩展是为结构体、类和枚举增加新功能。与OC的分类相似,但是没有扩展名字。常用于:添加类/实例计算属性 添加类/实例方法 提供新便携初始化器 定义和使用新内嵌类型 使现有类型遵循某些协议 定义下标更多的使用extension 可以使您的文件层次化,文件结构更清晰,更加具有面向协议编程效果,后期优化的时候能更方便。为协议提供默认实现S...原创 2019-11-07 14:06:26 · 667 阅读 · 0 评论 -
Swift使用通知Notification
通知简介通知(Notification)是观察者模式(observer)中的一种, 结构为: 发布者 -> 通知中心 -> 接收者, 是iOS 开发中常用通信方式,为单例模式使用。可以实现一对一、一对多通信。原理如下图:传统通知使用监听通知 /// 监听通知 private func registerNoti() -> Void { ...原创 2016-05-27 22:22:31 · 11148 阅读 · 0 评论 -
SDWebImage 在Swift中遇坑解决
首先SDWebImag的优点我也就不说了,至于为啥不用swift的库。我怕swift升级后又是一堆红。SDWebImage地址:第一坑:直接导入源工程文件,不能正常使用,因为要配置好多东西。解决,使用cocoapod集成。podfile如下:target “ZhiQianJia” dopod ‘SDWebImage’use_frameworks!end不用其他配置,很方便。原创 2017-08-08 17:10:55 · 2743 阅读 · 1 评论 -
Swfit Array 遍历 map flatMap filter reduce
官网文档:https://developer.apple.com/documentation/swift/array常用属性和方法可查看官网文档常用的方法有,创建,增删查改。这里主要记录下遍历方法。使用for in 遍历for item in arr{ print(item)}获取下标和值的遍历方式for (index, item) in arr.enume原创 2017-12-18 10:44:42 · 446 阅读 · 0 评论 -
iOS 模型转换
为了将数据对象话,通常需要将网络请求的JSON数据或者字典转换为模型。json数据一般有两种类型,第一种json字符串,需要解析出来,第二种json对象如:字典、数组 补充,网络传输一般使用的是jsonDate数据一、不使用第三方库转换1.字典转模型(定义模型类)a.普通属性对应转换: 模型类.objectWithKeyValues(dic) as? 模型类注意:字典中包含原创 2017-12-14 11:59:07 · 2082 阅读 · 0 评论 -
Swift中的选项集合
Swift3中的选项集合(Option Set)作者:Ole Begemann,原文链接,原文日期:2016/09/28译者:Lanford3_3;校对:saitjr;定稿:CMB选项集合在OC中的形态对于位掩码[可以多选的],Swift 给出的方案是:选项集合(option sets)。在 C 和 Objective-C 中,通常的做法是将一个布尔值选项集合表示为一系列值为 2转载 2017-08-21 00:06:35 · 846 阅读 · 0 评论 -
UIView自定义控件-Swfit
UIView自定义资料参考UIView中与AutoLayout相关的几个方法对比: 详细介绍了UIView约束布局相关调用顺序,好好理解有助于子空间布局和约束更新。UIView在AutoLayout下的布局过程iOS UIkit 提供简单的基本控件,但是有时候为了需求往往需要将多个控件整合到一个View控件中,此时就是自定义View两种方式:1.大神:纯代码(代码创建控件、...原创 2017-06-24 22:26:59 · 9325 阅读 · 3 评论 -
使用CoreLocation进行定位(Swift版)
使用CoreLocation进行定位(Swift版)在应用开发中,很多情况需要我们获取到当前的位置和高度信息,方便搜索周边,查看周边相同应用等,一切与定位有关的都得使用CoreLocation库,而且,系统是不允许第三发定位的,当然可以使用第三方对其封装过的,如百度地图API的定位服务。一.基本知识点1.使用的基本库:CoreLocation 所以相关类都带有CL2.主原创 2016-09-01 17:29:28 · 6703 阅读 · 0 评论 -
Swift中使用正则表达式
Swift中使用正则表达式环境:swift3 xcode8一、什么时候我们需要使用正则表达式1.判断一些字符是否符合所需要求;2.用于检索文本中所需字段。二、正则表达式的语法正则表达式的创建传送门:http://www.runoob.com/regexp/regexp-syntax.html常用的正则表达式参考:http://www.jb51.net/artic原创 2017-08-30 00:29:51 · 7766 阅读 · 1 评论 -
Swift 反射Mirror的使用
反射(Reflection)介绍对于C#、Java开发人员来说,肯定都对反射这个概念相当熟悉。所谓反射就是可以动态获取类型、成员信息,同时在运行时(而非编译时)可以动态调用任意方法、属性等行为的特性。以Java上的两个知名框架(hibernate和spring)为例。hibernate的属性映射就是通过反射来赋值的,spring的bean的创建就是根据配置的class来反射构建的。...转载 2017-08-29 11:49:45 · 4249 阅读 · 0 评论 -
iOS时间转换
iOS 时间转字符串, 字符串转 Date.以及 formatter 注意点。原创 2018-02-01 15:46:09 · 1983 阅读 · 0 评论 -
JSONSerialization.ReadingOption详解
JSONSerialization.ReadingOption详解官网链接: JSONSerialization在通过JSONSerialization来转换json,你有没有这样的疑问了????,下面函数的参数ReadingOption是干啥的,注释又在说些啥。JSONSerialization.jsonObject(with: Data, options: JSONSeriali...原创 2019-06-22 15:29:17 · 2215 阅读 · 0 评论 -
iOS闭包
iOS闭包简述闭包是很多语言都具有的语言特性,其主要的功能是作为回传作用。在iOS中主要使用闭包传递值。做一些类似异步执行代码的操作。Objective-C中的闭包1.声明闭包闭包的声明和赋值只是保存和传递一段代码,必须调用才能执行内部代码闭包变量的声明格式返回值类型(^闭包名字)(参数列表)void (^blockName) (int index, NSString *style);使用type...原创 2018-04-13 15:54:10 · 431 阅读 · 0 评论 -
UIWindow 使用介绍
一、简介 UIWindos可以理解为一个app的窗口,作为Controller的容器,一个App至少拥有一个window,且只有一个keyWindow,也可以有多个Window. keyWindow:指当前的主window,屏幕的最外层的window,所以有多个window时需要遍历获取目的window. window可以不占满全屏幕,可以在屏幕的某个frame位置。二、UIWind...原创 2018-04-17 11:49:04 · 1069 阅读 · 0 评论 -
iOS懒加载
懒加载的方式是视图在使用的时候才去生成对象,分配内存,并没有一开始就分配。一、Swfit定义基本格式就是 lazy var 变量名 : 类型 = { 闭包(可简写)}() //懒加载变量 lazy var ImagesContentView : UIImageView = { let view = UIImageView() return view ...原创 2018-03-19 14:34:58 · 297 阅读 · 0 评论 -
iOS单例模式定义与使用
单例模式是iOS开发中常用的一种设计模式,目的在于创建一次对象,多地方使用。系统中的单例例如:UIApplication、 NSUserDefaults 等,开发中我们可以用作用户管理。Objective-C 单例定义单例的定义方式有大概三种,gcd 和 互斥锁等这里例举gcd创建.h文件代码示例:@interface User : NSObject@property (nonatomic, ...原创 2018-03-01 17:25:13 · 2041 阅读 · 0 评论 -
UITableVeiw相关的需求解决
需求一:tableViewCell上添加一个详情按钮,点击实现效果和点击cell一致,需要获取数据源然后跳转。解决方法: 1.由cell处理点击,添加一个label代替button或者将button的点击用户交互取消(.isUserInteractionEnabled),点击事件交给cell处理。2.调用代理实现 : tableView.delegate?.tableVi原创 2017-12-27 11:24:58 · 312 阅读 · 0 评论 -
Swift 字典转数组
Swift 字典转数组1.Swift 类型的字典(Dictionary)let dic = ["name":"Tom","gender":"male","address":"XXXX省XXX市","age":76] as [String : Any]print(dic.keys) // ["address", "name&原创 2019-01-15 11:51:02 · 3023 阅读 · 0 评论 -
StoryBoard布局注意事项
StoryBoard布局注意事项 对于一个懒人来说,相对于代码写界面,我更喜欢使用可是化布局,可以实时看到,可是终究还是代码执行,所以很多东西还需要在代码中去做,所以我还是鼓励打家多用代码编写界面。1.生命周期注意事项不要在Controller的viewWillLoad中去使用来自于可视化布局布局和尺寸(特别是frame或bound)原因:在这几个方法中,可视化布局的约束并没有生效...原创 2017-08-03 12:38:16 · 937 阅读 · 0 评论 -
网页加载报错——URL网页连接错误
当使用web视图控件,或者进行网络编程,需要涉及URL的,在ios9及xcode7之后版本,如果不进行配置,将会在控制台出现以下错误;App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be con原创 2016-04-15 19:14:29 · 3484 阅读 · 0 评论 -
UIBezierPath使用
UIBezierPath使用贝塞尔曲线作用贝塞尔曲线路径可用来绘制自定义路径,圆,弧度,矩形,单独圆角矩形等UIBerzierPath类介绍初始化方法 /// MARK: - 初始化方法【常规路径】 /// 矩形 public convenience init(rect: CGRect) /// 椭圆 形状依赖于矩形(比如当矩形为正方形的时候为圆...原创 2015-11-22 16:42:31 · 825 阅读 · 0 评论 -
UIBezierPath路径绘图
UIBezierPath路径绘图一.新建一个playground二.新建一个类继承与UIView三.重写类中的drawRect()方法四.定义坐标点(我们这里定义五个点,打算绘制一个五角星)五.生成UIBezierPath类的实例,利用UIBezierPath类下的自定义方法(见上篇)给出绘制出路径,代码及效果如下图:swift源代码如下:...原创 2015-11-22 20:57:09 · 1090 阅读 · 0 评论 -
iOS 自动引用计数和内存泄露
Swift的自动引用计数->解决内存泄露在swift中的变量一般分为三种:1、 strong 强引用 默认2、 weak 弱引用 定义时前面加 weak关键字(值可选情况下使用)3、 unowned 无主引用 定义时前面加 unowned关键字(值不变情况下使用)销毁情况 强引用不会自原创 2016-05-24 12:05:29 · 2908 阅读 · 0 评论