随笔分类 - swift
1
swift技术
摘要:扫码采用类库:AVFoundation 1、相关权限 1)、需要在info.plist中添加以下权限:Privacy - Camera Usage Description(使用摄像机的权限说明) 2)、权限申请与判断: 查询权限:AVCaptureDevice.authorizationStatus
阅读全文
摘要:随着swift ABI的稳定,越来越多的开发者开始使用swift语言开发项目,但是由于大部分工具库也还是使用OC写的,因此我们不得不需要在项目中采用swift与oc混编。 在开发app项目时,swift与oc混编其实很容易,xcode会自动为我们建立一个桥接文件,这样我们就很容易的在swift中调用
阅读全文
摘要:扩展UI组件时常用到的一些发布者与订阅者如下: 发布者: ControlEvent(专门用于描述 UI 控件所产生的事件) 订阅者(观察者): Binder(专门用于绑定UI状态的,如:当某个状态改变时,更新UI状态) 既是发布者又是订阅者: ControlProperty(专门用于描述 UI 控件
阅读全文
摘要:动态成员查找是 Swift 中的一项功能特性,可提高与 Python 或 Javascript 等动态语言的互操作性。它允许动态成员查找调用看起来像访问类型属性的常规调用: let people = People() let name = people.name // 像访问属性一样 name是从字
阅读全文
摘要:在Swift中使用KVO,有如下两种方法: 原OC提供的: open func addObserver(_ observer: NSObject, forKeyPath keyPath: String, options: NSKeyValueObservingOptions = [], contex
阅读全文
摘要:什么是镂空效果,下图就是一个镂空效果的文字: 从图可知,文字是透明的,可以看到下面的图片内容,而UILabel其它部分是白色背景。 使用Quartz 2D绘制镂空效果,大体思路如下: 实现一个UILabel的子类(这个不是必须的,这样做的目的是为了利用UILabel自身的文字绘制功能方便的绘制出文字
阅读全文
摘要:Quartz 提供了两种不透明的数据类型来创建渐变CGShading 和 CGGradient,你可以使用其中任何一个来创建轴向或径向渐变。 轴向渐变:沿着一个轴方向线性渐变 径向渐变:一个点为原型,指定半径的范围内辐射渐变 我们用两个图来理解一下这两个概念: 1、轴向渐变(轴:沿着左上角 到 右下
阅读全文
摘要:CGPattern是在图形上下文中重复绘制的一系列绘制操作。你可以像使用颜色一样使用图案。当使用CGPattern进行绘制时,Quartz将页面划分为一组图案单元格,每个单元格的大小为CGPattern初始化时bounds的大小,并使用您提供的回调来绘制每个单元格。下图为一个简单的CGPattern
阅读全文
摘要:做过OC与swift混编的都知道,若实现swift调用OC的方法或OC调用swift方法,需要建立一个桥接文件,例如命名:MyBridging.h,在Build Settings中添加配置Swift Compiler - General中的Objective-C Bridging Header:My
阅读全文
摘要:我们知道swift中的数组类型为Array<Element>,它用于存储不同类型的元素,并且它是一个结构体struct,因此它是一个值类型,拥有写时拷贝特性。apple为我们提供了ManagedBuffer,用于存储不同类型的元素到缓冲区指针中,因此我们可以通过ManagedBuffer自己实现一个
阅读全文
摘要:我们知道swift值类型的变量在赋值操作后会放生深拷贝,即:赋值拷贝,而class类型的变量只会浅拷贝。我们看一个例子: class MyClass { var list: [Int] init(_ list: [Int]) { self.list = list } } struct MyStruc
阅读全文
摘要:isKnownUniquelyReferenced:用于判断一个AnyObject实例是否只存在唯一的强引用 class MyClass {} 判断MyClass实例存在唯一的强引用的例子: var cls = MyClass() if isKnownUniquelyReferenced(&cls)
阅读全文
摘要:在讲解指针之前,我们先来了解一下内存布局,计算机中的内存都是以字节为单位存储的,但是大部分处理器并不是按字节块来存取内存的。它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存,我们将上述这些存取单位称为内存存取粒度。所以我们需要通过一种内存对齐方式来存取,这样一方面可以节省内存,
阅读全文
摘要:Combine 是 Apple 对函数响应式编程库的实现,类似于RxSwift,它实现了大部分的RxSwift中的功能,但也存在一部分没有实现的功能,这里有一个Combine与RxSwift功能对照表,点击查看。Combine是SwiftUI的核心库,SwiftUI中的大部分属性包装器,例如@Sta
阅读全文
摘要:泛型:实质上就是不使用具体数据类型(例如 int、double、float 等),而是使用一种通用类型来进行程序设计的方法,该方法可以大规模的减少程序代码的编写量,让程序员可以集中精力用于业务逻辑的实现。 在OC中泛型通常用于以下情况: class MyContainer<T> { private
阅读全文
摘要:用过SwiftUI开发页面的同学,对@State的使用非常常见,它是用来监控属性值的变化,并通知SwiftUI更新页面的。 之前的文章中我已经介绍过@propertyWrapper的简单运用,不知道的同学,可以点击查看。 结合@propertyWrapper的运用,我们可以推断@State的实现原理
阅读全文
摘要:@propertyWrapper(属性包装器) 在swiftUI中大量使用了属性包装器,用来监控数据变化,从而更新UI的@State包装器等等。 通过@propertyWrapper注解,我们也可以实现自定义的属性包装,它可以应用在class、struct、enum类型上,下面我们通过struct来
阅读全文
摘要:@dynamicCallable与callAsFunction都是可以通过类型实例作为函数调用的实现方法。 @dynamicCallable实现方式,将此属性应用于类、结构、枚举或协议,以将该类型的实例视为可调用函数,你必须实现dynamicallyCall(withArguments:) 或dyn
阅读全文
1