Quincy-QC

个人博客

Property Wrapper - 属性包装器

Property wrappers in Swift

前言 在Swift 5.1中新增了Property Wrapper这个新的特性,能够将一些行为和逻辑直接附加到我们的属性上,可能极大提高我们代码的重用性,所以我们本次就来介绍这个Property Wrapper,同时分享针对一些场景的高效用法。 简单使用 顾名思义,属性包装器本质上是一种对定值提供额外逻辑包装的类型,通过@propertyWrapper来标识结构体或类实现。Property ......

Bitmap - 位的映射

A mapping from some domain (for example, a range of integers) to bits

前言 BitMap从字面的意思,很多人认为是位图,其实更准确的来说,是位的映射。下面我们分别从位映射算法和绘图中的绘图这两块内容来介绍Bitmap。 Bitmap 算法 Bitmap的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用bit为单位来存储数据,所以在存储空间方面,可以大大节约空间。 假设有这样一个需求:在20亿个随机整数中找出某个数是否存在,......

RealityKit - 实景AR

RealityKit AR with the Device's Camera

前言 有了上一篇对于RealityKit的基础概念介绍,现在我们直接对于实景AR水平平面放置物品进行一个简单实现。 初始化 ARView 我们首先需要创建一个通过设备相机创建的现实场景,可以通过创建一个arView属性,同时设置cameraMode为ar(这边是个枚举,如果选择nonAr就是一个使用虚拟相机的场景): 123456private lazy var arView: ARView......

RealityKit - 基础概念

RealityKit Experience

前言 最近Apple刚好在WWDC21上发布了Object Capture,基于这个契机,我们就想用苹果提供生成的模型加上最新的RealityKit框架进行一次实景AR开发,这篇文章就简单介绍RealityKit的基础概念。 介绍 RealityKit框架专门为增强现实量身定制,能够提供逼真的图像渲染、相机特效、动画、物理特效等等。借助原生ARKit整合、基于物理的超逼真渲染、变换和骨骼动画......

NSTimer循环引用解决方案

The Circular Reference Issue with NSTimer

问题 当我们从控制器View Controller跳转到一个启用重复调用定时器的控制器Anohter View Controller后,进行pop操作后,无法销毁该控制器Another View Controller。 1self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(timerAc......

加载带有签章的PDF文件

Load PDF File with Signature

前言 常规的PDF文件可以直接通过UIWebView或WKWebView直接进行本地文件或远程链接加载,但是带有签章的PDF文件,需要一些处理。 对于iOS 12以上的系统 可以直接使用WKWebView进行加载本地PDF文件或URL,就会直接显示电子签章。(UIWebView并不会直接显示电子签章)。 对于iOS 12以下的系统 即使是使用WKWebView也无法加载显示电子签章,这时候......

细谈map,flatMap和compactMap

Talk About map, flatMap and compactMap

前言 map是Swift中常用的函数,同时它还有两个兄弟级函数flatMap和compactMap,下面就根据官方声明和源码来谈谈这个三个函数之间的联系和区别,加以深刻记忆。 map 首先是map函数的使用: 123let nums = [1, 2, 3]let res = nums.map { $0 + 1 }print(res) // [2, 3, 4] map函数......

Kth Smallest/Largest Element in ...

Leet Code

Introduction Here is the summary about the kth problems in LeetCode. Kth Largest Element in an Array Find the kth largest element in an unsorted array. Note that it is the kth largest element in th......

使用Swift Package Manager管理依赖项

Swift Package Manager

前言 上一篇文章讲解了使用Cocoapods进行包管理的一些基本操作,讲到这里就不得不说刚刚集成于Xcode 11中支持iOS平台等多平台的包管理工具–Swift Package Manager。 在项目中使用加载 进入添加包依赖界面有两种方式,如下图: 然后可以进行包搜索,需要登录Git账号,可以在Accounts中进行设置。 搜索完成后可以进行版本选择(版本号、分支、Commit):......
iOS

基于Cocoapods创建私有公有库

Making a Cocoapod

前言 之前一直在用大神们的三方库,工作这么久也积累了一些自己的常用类库,考虑想要上传到自己的Cocoapods私有库,方便后期新项目的调用,下面来介绍上传方法。 方法 首先创建pod模板 可以使用pod lib create projectName,如果有自己的模板,可以添加--template-url=URL来调用。 创建过程会让你进行一些选项: 1234567891011121314Wh......
iOS