自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 收藏
  • 关注

原创 SwiftUI中竖向排版文字探索及封装(支持中文及英文)

在移动开发中,有时会遇到需要垂直排版文字的场景,特别是在一些中文设计中,竖排文本可以营造出一种独特的视觉效果。这篇文章将详细讲解如何实现一个支持竖排中文和英文的 SwiftUI 组件,并提供详细的代码实现和思路。

2024-10-24 13:00:00 751

原创 Swift concurrency 7 — Continuation的理解与使用(withCheckedContinuation、withCheckedThrowingContinuation)

在Swift中,continuation 是在异步代码中将基于回调的异步函数转换为使用现代 Swift 的 async/await 语法的一种机制。这种机制主要通过 withCheckedContinuation 和 withCheckedThrowingContinuation 函数来实现。这两个函数可以帮助我们将传统的基于回调的异步 API 适配到 Swift 的 async/await 机制中。

2024-10-24 08:30:00 382

原创 Swift concurrency 6 — TaskGroup的理解与使用

在SwiftUI中,TaskGroup 是一种处理并发任务的工具,特别适用于需要并发执行多个独立任务并在它们都完成后进行进一步处理的场景。TaskGroup 提供了一种结构化并发的方法,使得并行任务的启动、管理和结果收集变得更加简便和安全。

2024-08-31 19:24:54 821

原创 Swift concurrency 5 — async let的理解与使用

通过async let我们可以让一组异步方法同时去执行,并且当所有异步方法都返回结果后,程序再继续往下走。

2024-08-29 13:45:50 944

原创 Swift concurrency 4 — Task和.task的理解与使用

Swift中的Task是一种异步操作,它提供了一种替代DispatchQueue.main.async{}等传统方法的方法。通过使用Task,我们可以简化代码并更好地控制异步操作。此外,Task还提供了其他选项,可以进一步增强任务执行。

2024-08-29 08:48:16 673

原创 Swift concurrency 3 — 三种异步方式(@escaping closure, Combine, async/await)

本篇文章主要回顾了一下三种异步请求方式,@escaping closure, Combine, async/await这三种方式,并做了一些代码示例,无论采用哪种方法,都是因人而异,因项目而异,不过还是希望大家跟上最新的步伐,让自己的代码更高效,更稳健,更易维护。

2024-08-28 12:22:51 856

原创 Swift concurrency 2 — async await的理解与使用

async/await的组合能够帮助发开着写出更容易理解,更加健壮并且易维护的异步编程代码,它的出现将会替代以前的异步编程逻辑,对开发者更加友好。async和await是组合使用的,调用被async修饰的方法的时候,需要在异步上下文中执行,并且在调用方法的前面加上await关键字。如果需要提供一个上下文的环境,我们可以采用Task,其闭包内提供了一个异步环境。另外不管怎么调用,最终都要回归到UI上,切记要调用主线程代码。

2024-08-28 09:25:58 753

原创 Swift concurrency 1 — Do Try Catch Throws理解与使用

在 Swift 中,采用do-catch语句可以有效地处理可能出现的异常错误,提高应用的稳定性和用户体验。在适当的地方捕获和处理错误,是异常处理的关键步骤。在实际应用开发中,处理网络请求、数据解析等操作时,通常会用到异常处理机制。通过合理的异常处理,可以使应用更稳定,更易于维护。

2024-08-02 13:15:00 589

原创 Swift中@escaping的理解与使用

@escaping关键字修饰的闭包,意味着该闭包将在超出或离开你传递给它的作用域后仍然存在。也就是说这个闭包超出了方法的作用域,方法都return结束了,闭包还活着。而没有被@escaping关键字修饰的闭包在方法结束的时候,也结束了自己。

2024-08-02 09:00:34 598

原创 Swift Combine — Publisher和Subscriber的交互流程(自定义Publisher、Subscriber、Subscription)

本篇文章将详细介绍一下Combine中Publisher和Subscriber的交互流程,以及如何自定义Publisher、Subscriber、Subscription,通过自定义我们可以更好的理解一个完整的订阅流程。

2024-06-25 12:27:20 962 1

原创 Swift Combine — Scheduler(subscribe(on:)和receive(on:)的使用)

在 Swift 的 Combine 框架中,Scheduler 是一个重要的概念,用于控制任务的调度和执行。本文将详细介绍 Scheduler 的作用、常见的 Scheduler 类型以及如何使用 Scheduler 来管理任务的执行。

2024-06-25 07:54:23 1144

原创 Swift Combine — Debounce和Throttle的理解与使用

理解Combine中debounce和throttle的区别对于有效的事件处理和数据流控制至关重要。Debounce 操作符用于限制数据流的频率,只有在指定的时间间隔内没有新数据到达时,才会将最后一个数据发送出去。Throttle 操作符用于控制数据流的速率,只有在指定的时间间隔内才会发送数据,忽略掉间隔内的其他数据。

2024-06-24 11:13:36 1214

原创 Swift Combine — AnyCancellable的理解与使用

在Swift的Combine框架中,AnyCancellable是一个非常重要的类型,用于持有和管理订阅关系。它可以持有任何类型的Cancellable对象,并提供了一种类型擦除的方式来管理订阅关系。

2024-06-24 07:56:15 507

原创 Swift Combine — Notification、URLSession、Timer等Publisher的理解与使用

在Swift的Combine框架中,可以使用NotificationCenter.Publisher来创建一个能够订阅和接收通知的Publisher。同时URLSession.DataTaskPublisher也提供了一种方便的方式来执行网络请求并处理返回的数据。

2024-06-21 13:16:27 1407

原创 Swift Combine — zip和combineLatest的理解与使用

Publisher 上还有一些其他的操作,比如 zip 和 combineLatest,能让我们在时序上对控制多个 Publisher 的结果进行类似 and 和 or 的合并,它们在构建复杂 Publisher 逻辑时也十分有用。

2024-06-21 10:48:14 1255

原创 Swift Combine — Operators(常用Filtering类操作符介绍)

本文主要介绍了Combine中的一些过滤类的操作符,比如filter,tryFilter, compactMap, tryCompactMap, removeDuplicates等等。

2024-06-20 21:50:26 561

原创 Swift Combine — eraseToAnyPublisher的理解与使用(AnyPublisher)

使用eraseToAnyPublisher()将AnyPublisher的实例公开给下游订阅者,而不是该发布者的实际类型。这种形式的类型擦除保留了跨API边界的抽象,比如不同的模块。当你将发布者公开为AnyPublisher类型时,你可以随时更改底层实现,而不会影响现有客户端。

2024-06-20 08:15:42 599

原创 Swift Combine — Future和Promise的使用

Future是一个Publisher,发送单一的值,发送完以finish或者fails结束。Future代表将来,意在在将来的某个时间点发送数据给订阅者,多用在异步操作中。

2024-06-18 08:54:07 525

原创 Swift Combine — JUST Publisher

之前文章介绍的Publisher都是可以连续发送数据的,Subscriber也可以一直接收数据,除非收到了finished或者error而结束。而JUST Publisher则不同,它只向每个订阅者发送一次输出,然后结束。

2024-06-18 08:00:00 201

原创 Swift Combine — Subject Publishers(PassthroughSubject & CurrentValueSubject)

PassthroughSubject是Combine框架中的一种Subject具体类型,它不持有任何值,将自己接收到的任何值简单的传递给下游的Subscriber。Currentvaluessubject是Combine框架中的一种Subject具体类型。它可以保存单个值,并在设置新值时向任何订阅者发布新值。Currentvaluessubject在初始化的时候需要设置一个初始值。

2024-06-17 15:44:10 1137 1

原创 Swift Combine — Publisher、Operator、Subscriber概念介绍

Combine框架为应用程序如何处理事件提供了一种声明式的方法。可以为给定的事件源创建单个处理链,而不是潜在地实现多个委托回调或完成处理闭包。一个事件及其对应的数据被发布出来,最后被订阅者消化和使用,期间这些事件和数据需要通过一系列操作变形,成为我们最终需要的事件和数据。

2024-06-17 10:34:45 966 2

原创 SwiftUI中UIViewControllerRepresentable的使用(UIKit与SwiftUI的桥梁)

UIViewControllerRepresentable是一个协议,用于创建一个SwiftUI视图,该视图包装了一个UIKit中的UIViewController。通过实现UIViewControllerRepresentable协议,我们可以在SwiftUI中使用自定义的UIViewController,并与SwiftUI的生命周期进行交互。

2024-06-14 09:23:40 1146

原创 SwiftUI中UIViewRepresentable的使用(UIKit与SwiftUI的桥梁)

UIViewRepresentable是一个协议,用于创建一个SwiftUI视图,该视图包装了一个UIKit视图。通过实现UIViewRepresentable协议,我们可以在SwiftUI中使用自定义的UIKit视图,并与SwiftUI进行交互。

2024-06-14 07:02:54 1664

原创 SwiftUI中的@ViewBuilder理解与使用

@ViewBuilder是一个属性包装器,也是一个自定义的函数包装器,用于构建一个或多个视图。在 SwiftUI 中,很多地方都使用了 @ViewBuilder,例如 VStack、HStack、ZStack 和 Group 等。它可以接受多个视图并返回一个单一的组合视图。

2024-06-13 09:05:51 1393

原创 SwiftUI中自定义Shape与AnimateableData的使用

在 SwiftUI 中,AnimatableData 是一个关键的概念,用于定义可以被动画化的数据。通过实现 Animatable 协议,你可以让自定义视图或图形响应动画变化。AnimatableData 是 Animatable 协议的一部分,它指定了哪些数据是可以进行动画处理的。Shape协议继承了Animatable协议。

2024-06-13 08:10:50 451

原创 SwiftUI 中的自定义Shape

在 SwiftUI 中,Shape 协议允许开发者定义可重用的图形,这些图形可以用于绘制界面元素,如按钮、背景、边框等。通过实现 Shape 协议,可以创建完全自定义的图形,并控制其绘制方式。

2024-06-12 09:01:34 1207

原创 SwiftUI中matchedGeometryEffect修饰符的使用

MatchedGeometryEffect 是 SwiftUI 提供的一个强大的工具,它可以在视图层次结构中不同位置的视图之间创建平滑的动画过渡。这种效果特别适用于列表和详情视图之间的动画,或者在视图布局改变时保持视觉上的连贯性。

2024-06-12 08:01:22 470

原创 SwiftUI中自定义ViewModifier

在SwiftUI中,ViewModifier是一种强大的工具,用于封装和复用视图修改逻辑。通过创建自定义的ViewModifier,我们可以以一种干净且可维护的方式重用视图配置和样式。本文将介绍如何在SwiftUI中创建和使用自定义ViewModifier。

2024-06-11 09:20:46 610

原创 SwiftUI中结合使用Timer和onReceive

SwiftUI提供了一种现代化的方式来构建用户界面,其中包括对时间驱动的事件的响应。在许多应用中,可能需要根据时间间隔执行某些操作,例如更新界面或触发事件。SwiftUI通过结合使用Timer和 onReceive 来实现这一功能,使得处理时间相关的任务变得简单而直观。

2024-06-11 08:47:55 1096

原创 SwiftUI中Preference的理解与使用(ScrollView偏移量示例)

在 SwiftUI 中,Preference用于从视图层次结构的较深层次向上传递信息到较浅层次。这通常用于在父视图中获取子视图的属性或状态,而不需要使用状态管理工具如@State或 @ObservableObject。Preference特别用于自定义布局或组件,其中子视图需要向父视图报告其尺寸或其他属性。

2024-06-08 15:15:00 1030

原创 SwiftUI中Mask修饰符的理解与使用

Mask是一种用于控制图形元素可见性的图形技术,使用给定视图的alpha通道掩码该视图。在SwiftUI中,它类似于创建一个只显示视图的特定部分的模板。

2024-06-08 11:05:36 469

原创 SwiftUI获取用户的位置信息(CLLocationManager,CLLocationManagerDelegate)

本篇文章将会介绍一下在SwiftUI中如何通过CorLocation框架获取用户的位置信息,因为获取位置信息属于用户的隐私信息,所以需要在Info.plist文件里面加上访问位置权限的说明。

2024-06-07 12:55:11 649

原创 SwiftUI中GeometryReader与GeometryProxy的理解与使用

SwiftUI中的GeometryReader是一个视图,使用它我们可以很容易地访问父视图的大小和位置,并使用这些信息来创建一个响应式布局,以适应不同的设备和方向。在本文中,我们将探索使用GeometryReader的好处,并提供一些如何在项目中使用它的示例。

2024-06-07 08:27:49 1865

原创 SwiftUI中ScrollViewReader的使用(自动滚动ScrollView)

ScrollViewReader是我最喜欢的SwiftUI新版本的新功能之一。在iOS 14发布之前,控制ScrollView的滚动位置并不容易。如果希望滚动视图滚动到特定位置,我们必须找到自己的解决方案。使用ScrollViewReader,只需几行代码,就可以使滚动视图滚动到特定位置。本篇文章,我们将探究一下ScrollViewReader的使用。

2024-06-06 11:28:45 1592 1

原创 SwiftUI中Menu和ControlGroup的使用

本篇文章主要介绍一下Menu组件和ControlGroup组件的使用。Menu组件是在iOS 14(tvOS 17)推出的一个组件,点击后提供一个可选择的操作列表。ControlGroup组件是一个容器视图,以视觉上适当的方式为给定的上下文显示语义相关的控件,这意味着ControlGroup的外观将取决于视图的上下文。

2024-06-06 08:14:23 861

原创 SwiftUI中ContentUnavailableView的使用(iOS 17、tvOS 17推出的新组件)

iOS 17为SwiftUI带来了一个新的组件ContentUnavailableView,它允许我们向用户呈现一个空状态,而不需要创建自定义错误或者无内容视图。ContentUnavailableView易于使用,可自定义,并且具有用于空搜索状态的预定义视图。建议在无法显示视图内容的情况下使用它,可以用于网络错误、没有项目的列表、没有返回结果的搜索和其他空状态。

2024-06-05 10:30:00 728

原创 SwiftUI中Grid和GridRow的使用(gridCellUnsizedAxes,gridCellColumns,gridColumnAlignment,gridCellAnchor)

Grid可定制化的东西很多,比如对齐方式,间距,列宽度,甚至某个cell的锚点位置。但是Grid是一次性加载完其内部的所有视图,对性能有一定的要求。而且配合ScrollView只能竖向的滑动。

2024-06-05 07:57:47 1524

原创 SwiftUI中LazyVGrid和LazyHGrid的介绍以及GridItem的用法

在SwiftUI中,我们可以使用LazyVGrid或LazyHGrid视图创建一个二维响应列表。如果我们想要一个垂直网格,我们可以使用LazyVGrid视图,如果我们想要一个水平网格,我们可以使用LazyHGrid视图。这些视图允许我们创建一个网格的项目,以适应不同的方向和屏幕大小。随着iOS 16的推出,苹果引入了Grid组件,同样是二维管理其内部的子视图,出此之外,Grid还有更多独有的功能。

2024-06-04 10:57:11 1256

原创 SwiftUI中的AnyLayout的理解与使用以及自定义Layout

AnyLayout是SwiftUI中的一个类型擦除容器,它可以包装任何遵循Layout协议的布局。这意味着我们可以使用AnyLayout来抽象具体的布局类型,从而在运行时决定使用哪种布局。这种灵活性极大地增强了UI组件的可重用性和适应性。AnyLayout可以在保持视图identifier的同时在布局(Layout)之间进行转换。

2024-06-04 08:38:23 467

原创 SwiftUI中Toolbar使用介绍(ToolbarItem, ToolbarItemPlacement, ToolbarItemGroup, ToolbarContent)

本篇文章中我们主要介绍一下`SwiftUI`中`Toolbar`的相关使用,`Toolbar`不仅在导航栏中非常非常的重要,在一些静态视图中也非常常用。

2024-06-03 13:04:09 1280 2

SwiftUI之判断ScrollView是否滑动到底部及ChildSizeReader的使用文章示例代码

SwiftUI之判断ScrollView是否滑动到底部及ChildSizeReader的使用文章中所使用的示例代码。

2023-09-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除