网罗开发
全网 10万+ 粉丝, 欢迎您的关注与支持。交流合作私信+
展开
-
如何使用 SPM 插件从 Pkl 配置文件生成 Swift 接口
Pkl(全称为 Pickle)是苹果推出的一种全新的专用于配置的编程语言。它允许开发人员通过类型和内置验证安全、直观地设计数据模型。作为苹果语言,Pkl 有一个可用于从.pkl配置文件生成 Swift 接口的套件工具,这是它与其他语言的开发者有所不同的地方。在本文中,你将学习如何安装和使用命令行工具,并将其集成到你的 Swift Package Manager(SPM)项目中,方法是使用 SPM 插件。注意:需要注意的一点是,目前 Pkl 仅适用于 macOS。原创 2024-07-01 21:11:45 · 298 阅读 · 0 评论 -
Swift 中的 StoreKit 测试
StoreKit 框架的第二次迭代是我在过去几年中应用程序中最重大的变化。最近版本的 StoreKit 框架已完全采用了 Swift 语言特性,如 async 和 await。本篇内容我们将讨论 StoreKitTest 框架,这不是 StoreKit 2 的一部分,但与之紧密耦合。框架为我们提供了类型。使用类型的实例,我们可以购买应用内产品、管理交易、退款和过期订阅等。原创 2024-07-01 19:11:35 · 129 阅读 · 0 评论 -
掌握 Swift 中的 reduce 操作符,使你的代码更高效
Swift 的Sequence类型有一个强大的操作符叫做reduce,它允许你将序列的所有元素组合成一个单一的值。在处理来自 App Store Connect API 的响应时,我一直在反复使用它,我觉得写一篇关于它的博客文章是个好主意。reduce// 使用初始结果进行 reduce// 将结果归并到初始结果中这两个操作符在给定相同输入时实现相同的结果:它们从一个初始的inout值开始,遍历序列中的所有元素,并将它们作为参数传递给提供的闭包。由于初始值是作为inout。原创 2024-06-30 23:19:54 · 49 阅读 · 0 评论 -
使用 Swift 递归搜索目录中文件的内容,同时支持 Glob 模式和正则表达式
如果你新加入一个团队,想要快速的了解团队的领域和团队中拥有的代码库的详细信息。如果新团队中的代码库在 GitHub / GitLab 中并且你不熟悉代码所有权模型的概念或格式。本篇文章以 GitHub 为例,你可以使用 Glob 模式将一个或多个文件链接到 GitHub 团队。如果新团队中的代码库有一个 GitHub 的 CODEOWNERS 文件,可以反映拥有的每个文件或文件组。这是对了解整个框架有很大帮助,如果没有,可以尝试创建一个。原创 2024-06-30 23:18:34 · 209 阅读 · 0 评论 -
Swift 6:导入语句上的访问级别
SE-0409 提案引入了一项新功能,即允许使用 Swift 的任何可用访问级别标记导入声明,以限制导入的符号可以在哪些类型或接口中使用。由于这些变化,现在可以将依赖项标记为对当前源文件(private或)、模块(internal)、包(package)或所有客户端(public)可见。:这是一个已经可用的实验性功能标志,允许开发人员将导入声明标记为访问级别。:这是一个即将推出的功能标志,目前尚不可用,它将导入语句的隐式访问级别从public更改为internal,就像 Swift 6 将要做的那样。原创 2024-06-28 19:28:28 · 206 阅读 · 0 评论 -
SwiftUI 中的内容边距
SwiftUI 引入了一组视图修饰符,使我们能够有效地管理视图中的安全区域。在许多情况下,安全区域是你希望放置内容的地方。今天,我们将了解 SwiftUI 引入的新内容边距概念以及它与安全区域的区别。本文介绍了 SwiftUI 中的内容边距管理,通过对比安全区域的概念,解释了内容边距的重要性。文章从创建示例开始,展示了在列表视图中如何处理内容边距的问题。随后,通过介绍 UIKit 中的布局指南以及 SwiftUI 中的视图修饰符,展示了在 iPad 上适配内容边距的方法。最后,引入了。原创 2024-06-28 19:00:29 · 64 阅读 · 0 评论 -
使用 SwiftUI 为 macOS 创建类似于 App Store Connect 的选择器
最近,我一直在为我的应用开发一个全新的界面,它可以让你查看 TestFlight 上所有可用的构建,并允许你将它们添加到测试群组中。作为这项工作的一部分,我需要创建一个组件,允许用户从特定构建中添加和删除测试群组。我希望构建类似于 App Store Connect 中的选择器组件,使用户体验尽可能熟悉,并在本文中,将展示如何使用 SwiftUI 为 macOS 构建了这个组件。文章介绍了如何使用SwiftUI为macOS创建类似于 App Store Connect 的选择器组件。原创 2024-06-27 19:18:01 · 282 阅读 · 0 评论 -
如何在 SwiftUI 视图中显示应用图标和版本
在应用中显示应用图标和版本是为用户提供快速识别应用版本和变体的好方法,无论是内部用户(如测试人员或利益相关者)还是外部用户。在这篇文章中,我们学习了如何在 SwiftUI 应用中显示应用图标和版本信息。这对于用户(无论是内部测试人员还是外部用户)来说,是一种快速识别应用版本和变体的有效方法。我们通过从主包中检索 Info.plist 文件中的相关键值,获取应用图标。具体步骤包括读取和键的值,并获取图标文件名。接着,我们采用类似的方法,通过读取Info.plist文件中的键的值,获取应用版本信息。原创 2024-06-26 20:17:55 · 196 阅读 · 0 评论 -
如何使用 Swift 中的 GraphQL
我一直在分享关于类型安全和在 Swift 中构建健壮 API 的更多内容。今天,我想继续探讨类型安全的话题,介绍 GraphQL。GraphQL 是一种用于 API 的查询语言。本周,我们将讨论 GraphQL 的好处,并学习如何在 Swift 中使用它。原创 2024-06-25 21:21:29 · 241 阅读 · 0 评论 -
使用 Swift 6 语言模式构建 Swift 包
我最近了解到,Swift 6 的一些重大变更(如完整的数据隔离和数据竞争安全检查)将成为 Swift 6 语言模式的一部分,该模式将在 Swift 6 编译器中作为可选功能启用。这意味着,当你更新 Xcode 版本或使用 Swift 6 编译器的 Swift 工具链时,除非你明确启用 Swift 6 语言模式,否则你的代码将使用 Swift 5 语言模式进行编译。在本文中,我将向你展示如何下载和安装 Swift 6 工具链的开发快照,并在构建 Swift 包时启用 Swift 6 语言模式。原创 2024-06-24 22:40:00 · 185 阅读 · 0 评论 -
在 SwiftUI 中 accessibilityChildren 视图修饰符的作用
SwiftUI 为我们提供了一系列丰富的视图修饰符,用于操作视图的可访问性树。我已经介绍了其中许多,你可以在博客中找到它们。本文我们将讨论视图修饰符以及我们如何从中受益。视图修饰符允许我们为视图创建一个可访问性容器,并使用闭包提供的视图元素进行填充。今天,我们了解了 SwiftUI 为我们提供的又一个强大的可访问性视图修饰符。SwiftUI 凭借提供如此多友好的 API,简化了我们为了使我们的应用对每个人都具有可访问性而必须做的工作,做得非常出色。原创 2023-12-21 11:39:40 · 838 阅读 · 0 评论 -
在 SwiftUI 中创建一个环形 Slider
Slider 控件是一种允许用户从一系列值中选择一个值的 UI 控件。在 SwiftUI 中,它通常呈现为直线上的拇指选择器。有时将这种类型的选择器呈现为一个圆圈,拇指绕着圆周移动可能会更好。本文介绍如何在 SwiftUI 中定义一个环形的 Slider。本文展示了如何定义响应拖动手势的圆环滑块控件。可以设置滑块视图的大小,并且滑块按预期工作。可以向控件添加更多参数以设置颜色或圆环内显示的值的格式。原创 2023-08-18 09:31:54 · 568 阅读 · 89 评论 -
如何在 SwiftUI 中配置 SwiftData
在 WWDC 2023 上,Apple 宣布了一个备受期待的新持久性刷新,以一种新的框架形式出现:SwiftData。SwiftData 从 iOS 17 开始提供,允许使用 Swift 类型对应用程序的持久性数据进行建模,并以类型安全和声明性的方式执行 CRUD 操作。在本文中,将展示如何配置 SwiftData 用于一个 SwiftUI 应用程序,并分享在这个过程中学到的一些经验。原创 2023-07-10 11:44:42 · 1117 阅读 · 123 评论 -
SwiftUI 中的水平条形图
水平条形图以矩形条的形式呈现数据类别,其宽度与它们所代表的数值成正比。本文展示了如何在垂直条形图的基础上创建一个水平柱状图。水平条形图不是简单的垂直条形图的旋转。在 等应用程序中,水平条形图被定义为独立的图表类型,而不是垂直条形图。除了条形差异外,x 轴和 y 轴的格式也需要不同。系列文章水平条形图不仅仅是在垂直条形图上的配置,有一些元素是可以重复使用的。对于垂直条形图组件和水平条形图组件来说,重复使用一些结构和SwiftUI视图并不简单。标题和关键区域可以原样重用。创建 的副本,并将其名称改为 。它控原创 2022-12-05 16:29:56 · 3485 阅读 · 17 评论 -
如何在 SwiftUI 中创建条形图
在 SwiftUI 中组合矩形来创建条形图是比较容易的。SwiftUI 是一个很好的平台,用于创建视图和快速重构独立的子视图。在 SwiftUI 中构建条形图需要做一些工作,随着使用数据来试用条形图,可以确定更多的定制化。使用可以创建适应更多可用环境的条形图。在这篇文章中,我们创建了一个简单的条形图,有数值,下面有标签,还有图表的标题,下一步就是分离出 x 轴和 y 轴。原创 2022-11-30 17:48:33 · 1891 阅读 · 1 评论 -
高级 SwiftUI 动画 — Part 1:Paths
前言在本文中,我们将深入探讨一些创建 SwiftUI 动画的高级技术。我将广泛讨论 Animatable 协议,它可靠的伙伴 animatableData,强大但经常被忽略的 GeometryEffect 以及完全被忽视但全能的 AnimatableModifier 协议。这些都是被官方文档完全忽略的主题,在SwiftUI 的帖子和文章中也几乎没有提及。不过,它们还是为我们提供了创建一些相当不错的动画的工具。在我们进入这些隐藏的瑰宝之前,我想对一些基本的 SwiftUI 动画概念做一个非常快速的总结。原创 2022-02-14 17:15:46 · 1792 阅读 · 0 评论 -
高级 SwiftUI 动画 — Part 2:GeometryEffect
在本系列的第一部分,我介绍了Animatable协议,以及我们如何使用它来为路径制作动画。接下来,我们将使用一个新的工具: GeometryEffect,用同样的协议对变换矩阵进行动画处理。如果你没有读过第一部分,也不知道Animatable协议是什么,你应该先读一下。或者如果你只是对GeometryEffect感兴趣,不关心动画,你可以跳过第一部分,继续阅读本文。GeometryEffectGeometryEffect是一个符合Animatable和ViewModifier的协议。为了符合Geome.原创 2022-02-21 11:58:11 · 867 阅读 · 0 评论 -
高级 SwiftUI 动画 — Part 3:AnimatableModifier
前言之前的两篇文章animating paths 和 transform matrices 对 Animatable 协议使用做了介绍,今天这篇文章将为大家介绍 AnimatableModifier,使用它可以完成更多的动画工作。AnimatableModifier 是一个 ViewModifier,符合 Animatable 协议,如果对这个协议不了解可以阅读之前发布的两篇文章。AnimatableModifier 无法实现动画如果是第一次使用 AnimatableModifier,可能会遇到问.原创 2022-02-24 11:46:04 · 1930 阅读 · 0 评论 -
高级 SwiftUI 动画进阶 —— Part4:TimelineView
前言前三篇高级 SwiftUI 动画系列是作者在 WWDC 2021 之前实战总结的内容。对 2021 年 WWDC 介绍的 TimelineView 和 Canvas 感到激动。这开启了一个全新的可能性,笔者将试图在这一部分和下一部分的系列中阐释这些可能性。在这篇文章中,我们将详细地探索 TimelineView 。我们将从最常见的用途缓慢开始。然而笔者认为,最大的可能性来自于 TimelineView 和我们已知现有的动画相结合。在其他事物中,通过一点创意,这样的组合将让我们最终实现“关键帧类似”原创 2022-03-09 19:01:30 · 464 阅读 · 0 评论 -
SwiftUI 动画进阶 — Part 5:Canvas
这个高级SwiftUI动画系列的第五部分将探索Canvas视图。从技术上讲,它不是一个动画视图,但当它与第四部分的 TimelineView 结合时,它带来了很多有趣的可能性,正如这个数字雨的例子所示。我不得不把这篇文章推迟几周,因为 Canvas 视图有点不稳定。我们仍然处于测试阶段,所以这是可以预期的。然而,该视图产生的崩溃使这里的一些例子无法分享。虽然不是所有的问题都得到了解决,但现在每个例子都能顺利运行。在文章的最后,我将指出我找到的一些解决方法。一个简单的 Canvas简而言之,画布Can原创 2022-04-06 10:26:29 · 732 阅读 · 0 评论 -
SwiftUI 中的自定义导航
默认情况下,SwiftUI提供的各种导航API在很大程度上是以用户直接输入为中心的——也就是说,导航是在系统响应例如按钮的点击和标签切换等事件时由系统本身处理的。然而,有时我们可能想更直接地控制应用程序的导航执行方式,尽管SwiftUI在这方面仍然不如UIKit或AppKit灵活,但它确实提供了相当多的方法,让我们在构建的视图中执行完全自定义的导航。让我们先来看看我们如何能控制当前在中显示的标签。通常情况下,当用户手动点击每个标签栏中的一个项目时,标签就会被切换,但是通过在一个给定的中注入一个选择()绑定,原创 2022-06-09 16:33:46 · 1102 阅读 · 0 评论 -
SwiftUI 状态管理系统指南
SwiftUI与苹果之前的UI框架的区别不仅仅在于如何定义视图和其他UI组件,还在于如何在整个使用它的应用程序中管理视图层级的状态。SwiftUI没有使用委托、数据源或任何其他在UIKit和AppKit等命令式框架中常见的状态管理模式,而是配备了一些属性包装器,使我们能够准确地声明我们的数据如何被我们的视图观察、渲染和改变。本周,让我们仔细看看这些属性包装器中的每一个,它们之间的关系,以及它们如何构成SwiftUI整体状态管理系统的不同部分。由于SwiftUI主要是一个UI框架(尽管它也开始获得用于定义更高原创 2022-07-01 15:49:38 · 744 阅读 · 0 评论 -
使用 SwiftUI 的 Eager Grids
早在 2020 年,我们就拥有了在 SwiftUI(LazyVGrid 和 LazyHGrid)中绘制网格的新视图控件。两年后,我们又获得了另一种在网格(Grid)中显示视图的视图控件。但是,这些新增功能非常不同,不仅在您使用它的方式上,而且在它内部的行为方式上。2020 年的观点很懒惰。这些新人很热心。lazy grids不会渲染甚至实例化屏幕外的视图。单元格视图仅在它们被滚动时创建,并且在它们滚动时停止计算。这篇文章的主题 Eager Grids 正好相反。原创 2022-09-12 18:49:11 · 961 阅读 · 0 评论 -
SwiftUI 之 HStack 和 VStack 的切换
SwiftUI的各种堆栈是许多框架中最基本的布局工具,能够让我们定义组视图,这些组视图可以按照水平、垂直或覆盖视图对齐。当涉及到水平和垂直的变体时(HStack和VStack),我们需要在这两者之间动态的切换。举个例子,假如我们正在构建一个app其中包含VStack {以上代码中,我们用到了fixedSize防止按钮文本被截断,这仅是在我们确信给定的内容视图不会比视图本身更大的情况。想了解更多信息,可以查看我的文章 -SwiftUI 布局系统第三章。原创 2022-10-13 14:18:43 · 1001 阅读 · 0 评论 -
SwiftUI 锁屏小组件
实现锁屏小组件很简单,因为它的 API 与主屏小组件共享相同的代码。本周我们将学习如何为我们的 App 实现锁屏小组件。环境值来获得实际的渲染模式,并表现出不同的行为。像之前讲到的,在重音模式( accented mode )下,系统将小部件分为两部分,并对它们进行特殊着色。最好记住,系统对锁屏和主屏小组件使用不同的渲染模式。我们需要做的就是删除默认语句,并实现定义锁屏小组件的所有新用例。如果你仍然支持 iOS 15,可以检查新锁屏小组件的可用性。在上面的示例中,我们有一个定义小组件的典型视图。原创 2022-10-24 08:45:36 · 1598 阅读 · 0 评论