知识大胖
这个作者很懒,什么都没留下…
展开
-
SwiftUI 中的 10 个致命错误以及如何避免它们
SwiftUI 是一项了不起的技术,它使我们能够为我们的 iOS、macOS、watchOS 和 tvOS 应用程序创建美观、响应迅速且交互式的用户界面。然而,与任何技术一样,我们中的许多人在使用 SwiftUI 时都会犯一些常见错误。在本文中,我将讨论 SwiftUI 中另外 10 个最常见的错误以及如何避免它们。原创 2023-05-06 17:22:10 · 366 阅读 · 0 评论 -
探索 SwiftUI 声明式语法的强大功能
在深入研究 SwiftUI 的声明式语法之前,让我们首先定义“声明式”的含义。在声明式编程风格中,开发人员描述他们希望代码做什么,而不是如何做。这与命令式编程风格形成对比,在命令式编程风格中,开发人员编写代码告诉计算机如何执行任务。原创 2023-04-11 17:45:38 · 220 阅读 · 0 评论 -
SwiftUI 内功之如何在 Swift 中复制对象?浅拷贝与深拷贝
在很多情况下,您需要将一个copy现有对象变成另一个对象。例如,您可以在写入代码数据之前创建现有数据模型的本地副本。在讨论如何使用copySwift 中的对象之前,让我们首先探索可用的不同技术。原创 2023-04-11 06:48:22 · 729 阅读 · 0 评论 -
SwiftUI 内功之Swift 中的函数柯里化
函数柯里化是函数式编程中的一种技术,它将一个接受多个参数的函数转换为一系列函数,每个函数接受一个参数。一位名叫 Haskell Curry 的美国数学家开发了这种技术,这就是它被称为 currying 的原因。因此,像 f(a, b, c, …) 这样的函数可以转换为 f(a)(b)©…。此过程为每个参数返回一个新函数,直到提供了所有参数,并且可以评估原始函数。生成的函数,也称为柯里化函数,可以组合和组合以创建更复杂的功能。原创 2023-04-11 06:36:35 · 154 阅读 · 0 评论 -
Swift Copy On Write:如何在您的代码中实现它
写时复制是计算机编程中使用的一种优化技术,也称为“COW”。基本原则是您可以向请求资源的多个调用者提供指向同一资源的指针,这些调用者首先无法区分。这个函数可以继续运行,直到调用者尝试更新它的资源“副本”;那时,会制作一个真正的私人副本,以防止其他人看到修改。对于来电者来说,一切都是透明的。主要好处是,如果调用者从不进行任何更改,则无需制作私人副本。数组、字典和字符串是标准库构建的集合示例,它们利用优化来降低复制的性能成本。这些集合共享原始实例和任何副本之间保存项目的内存,而不是立即创建副本。原创 2023-01-18 16:36:21 · 238 阅读 · 0 评论 -
使用视图模型和协议释放可重用 SwiftUI 视图的力量
可重用视图是现代应用程序开发中的一个重要概念,尤其是在使用 SwiftUI 构建应用程序时。可重用视图本质上是可以在应用程序的不同部分重用的组件,提供一致的外观和感觉,并在开发过程中节省时间和精力。在这篇博文中,我们将探索如何创建使用带有协议的视图模型的可重用 SwiftUI 视图,以及这种方法如何进一步提高视图的灵活性和适应性。SwiftUI 是一个用于在 Apple 平台上构建用户界面的声明性框架,它提供了许多可以轻松创建可重用视图的功能。原创 2023-01-01 12:41:21 · 208 阅读 · 1 评论 -
SwiftUI NavigationSplitView 学习使用 iOS 16 中引入的新 NavigationSplitView
为 iPad 开发应用程序迫使我们彻底重新思考我们产品的用户体验。我已经多次看到 iPad 上的同一个应用程序在不做任何更改的情况下进行了调整,全部都被拉长了……老实说,这太糟糕了。iPad 给的额外空间可以用许多不同的巧妙方式使用……今天我将向您展示如何使用 iOS 16 的新 NavigationSplitView。原创 2022-12-31 19:12:47 · 742 阅读 · 0 评论 -
SwiftUI 中管理和共享数据:@StateObject、@State、@EnvironmentObject
在本文中,我们将了解一些在 SwiftUI 中管理和共享数据的最常用选项,包括@State、@StateObject、@EnvironmentObject、@ObservableObject、Binding 和@AppStorage。@EnvironmentObject:用于@EnvironmentObject将属性标记为对注入到视图层次结构环境中的共享对象的引用。在这里,该user属性被标记为@StateObject,因此对其值的任何更改都将在依赖它的所有视图之间共享。原创 2022-12-31 18:59:28 · 871 阅读 · 0 评论 -
为客户端-服务器应用程序不断发展的 SwiftUI 架构,将 React.js 知识应用到 SwiftUI
在本文中,您了解了客户端/服务器应用程序的 SwiftUI 架构。该架构的灵感来自 React 应用程序。如前所述,React、Flutter 和 SwiftUI 有很多相似之处,作为开发人员,我们应该始终尝试向更成熟的框架学习。原创 2022-12-30 16:38:30 · 238 阅读 · 0 评论 -
SwiftUI开源库之 什么是 Lottie?Airbnb 的跨平台开源库,用于渲染矢量运动图形
我们在这里进行了一项实验,发现切换到新的渲染引擎可以减少我们应用程序的总启动时间,同时还可以提高启动动画的帧速率和用户体验。从今天的 iOS Lottie 4.0 版本开始,Core Animation 渲染引擎默认为所有使用 Lottie 的应用程序启用,应用程序开发人员不需要额外的工作或迁移。这个新引擎消除了播放 Lottie 动画的 CPU 开销,并有效地保证 Lottie 动画将以 60 或 120 fps 的速度流畅地动画,而不管应用程序的 CPU 负载如何。原创 2022-12-22 08:07:23 · 1384 阅读 · 0 评论 -
使用 SwiftUI 的服务器驱动 UI
介绍WWDC2017,Apple 推出了 Codable,这是一个在 Swift 中处理数据的强大而方便的工具,它被广泛用于各种应用程序和上下文中。各种应用吧?SwiftUI 在 WWDC2019 中推出,作为构建用户界面的直观框架,并提供声明性语法,以比传统命令式方法更易于读写的方式创建用户界面。SwiftUI 中的视图可以符合 Codable,这意味着视图可以序列化和/或反序列化以用于存储、缓存和…网络。如果我们可以从服务器请求视图怎么办?原创 2022-12-21 08:15:59 · 893 阅读 · 0 评论 -
如何在 Swift 中向视频添加文本
在本文中,您将了解如何使用 Swift 和 AVMutableVideoComposition 向视频剪辑添加文本叠加层。本文中的代码使用 Swift 5。使用示例代码为 Swift Playground克隆此存储库。原创 2022-12-20 12:27:52 · 668 阅读 · 0 评论 -
swiftui 中的app和 Scenes有什么,他们是什么关系
SwiftUI 中的 app 和 Scenes 是两个相关的概念,它们都与应用程序的用户界面有关。app 是指使用 SwiftUI 框架开发的应用程序,它包含了用户界面的所有内容和逻辑。在 SwiftUI 中,app 的界面通常由多个视图组成,每个视图都可以显示不同的内容和处理不同的用户交互。Scenes 是指 app 中的独立的用户界面部分,每个 Scene 都有自己的窗口和生命周期。原创 2022-12-10 22:17:22 · 1027 阅读 · 0 评论 -
SwiftUI 数字显示格式应用大全实现数字格式化为货币值、百分比值、序数值(Swift NumberFormatter 应用案例)
在 Swift 编程语言中,NumberFormatter 类可用于将数字格式化为字符串。原创 2022-12-10 17:42:01 · 889 阅读 · 0 评论 -
Swift 泛型和类型系统
这一次,让我们来看看 Swift 中的泛型。泛型更加必要,因为 Swift 是一个类型系统。Swift 是一种带有类型系统的编程语言。所以下面的代码将返回构建错误。具有类型系统的语言允许您创建更安全、无错误的程序。然而,每天都要处理各种案件也有不利之处。只需看一下将两个数字相加的函数,如下所示。泛型的存在是为了弥补这种类型系统的缺点。让我们看一下下面使用泛型创建的将两个数字相加的函数。这些函数称为通用函数还有一种叫做通用类型的东西。Apple Foundation 中使用的许多类也是泛型类型。我们以原创 2022-12-06 09:51:53 · 275 阅读 · 0 评论 -
Swift 中的并发:Continuations
Swift 中的 Continuations 用于将同步代码转换为异步代码。我们现在可以将闭包转换为允许结构化并发的异步等待函数。在本文中,我将向您展示如何使用延续并讨论您可以使用的不同类型。有两种类型的延续:CheckedContinuation 和 UnsafeContinuation。让我们从我们过去如何编写网络调用开始。下面是一个名为“getAllBreeds”的函数,它带有一个采用 Result 类型的转义闭包。假设您想将其转换为异步方法。使用 Xcode,这真的很容易做到。按住 Option原创 2022-12-06 09:39:57 · 418 阅读 · 0 评论 -
SwiftUI Swift基础之Swift 数组的多种方法(教程含源码)
Swift 团队在构建 Arrays 时非常彻底。有许多方法可供我们免费使用。我最近写了一篇名为Swift Arrays are powerful的文章。在其中,我讨论了如何在我们的代码中更好地使用数组方法以使其更具表现力和精确性。浏览完文档后,我觉得浏览一些可用的方法会很有帮助。在这篇文章中,我想通过其中的许多方法来展示免费提供给我们的各种东西。当您了解所有这些方法时,您将开始更加欣赏 Swift 数组并以更有创意的方式使用它们。曾经需要多次实例化具有相同元素的数组吗?Swift 数组有一个初始化器,它允原创 2022-12-06 08:56:00 · 674 阅读 · 0 评论 -
SwiftUI Swift内功之Swift 5.8 适合Early Adopters
Swift 5.8 是最初主要用于原生 iOS 应用程序的编程语言的次要版本。让我们看看有什么新鲜事!原创 2022-11-07 08:30:19 · 619 阅读 · 0 评论 -
SwiftUI 编程能力提升之 不同设计工具的比较
Sketch 长期以来一直是用户界面 (UI) 和用户体验 (UX) 设计中最受欢迎的设计工具之一。但近年来,出现了其他流行的替代品。其中最大的两个是 Figma 和 Adobe XD。原创 2022-10-14 08:37:59 · 309 阅读 · 0 评论 -
SwiftUI 编程能力提升之 为 Swift 构建一个灵活的依赖注入库
在这篇博客中,我们讨论了依赖注入及其在日常编码中使用的好处。然后,我们探索了使用相对较少的代码在 Swift 中创建灵活的DependencyContainer。我们还研究了使用propertyWrappers来增强我们的实现并添加额外的propertyWrappers以使用惰性和弱实现注入属性。这些将帮助我们与日常使用变量的不同方式保持一致。最终实现可以在文末找到。原创 2022-10-14 08:35:31 · 186 阅读 · 0 评论 -
SwiftUI 编程能力提升之 为 Swift 构建一个灵活的依赖注入库
在这篇博客中,我们讨论了依赖注入及其在日常编码中使用的好处。然后,我们探索了使用相对较少的代码在 Swift 中创建灵活的DependencyContainer。我们还研究了使用propertyWrappers来增强我们的实现并添加额外的propertyWrappers以使用惰性和弱实现注入属性。这些将帮助我们与日常使用变量的不同方式保持一致。最终实现可以在文末找到。原创 2022-10-14 08:35:00 · 323 阅读 · 0 评论 -
SwiftUI 编程能力提升之使用 Swift 包管理器交付我们的库,什么是 Swift 包管理器 (SPM)
Swift Package Manager 是一个用于管理 Swift 代码分发的工具。它与 Swift 构建系统集成以自动化下载、编译和链接依赖项的过程。Apple 创建此管理器是为了帮助开发人员通过 github、gitlab 等服务分发他们的代码。从 Xcode 11 开始,它已与 Xcode 完全集成,以便在您的项目中包含 iOS、macOS、watchOS 和tvOS 应用程序。原创 2022-10-14 08:23:43 · 749 阅读 · 0 评论 -
SwiftUI 编码能力提升之 XcodeGen 是什么, 为什么要使用这个工具(教程含源码)
Xcodegen 是一个命令行工具,iOS 开发人员可以使用它来根据您的项目文件夹结构和提供给 project.yml 文件的参数自动生成 Xcode 项目文件,该文件包括从目标、方案到代码签名的所有内容以及项目的所有内容文件已经包含。在一个客户项目中,我们有一个由 6 名 iOS 开发人员组成的团队同时编写代码。有一点,我们都在整个项目中处理不同的功能,但项目文件几乎总是被修改,而另一个团队也在处理它。原创 2022-10-14 08:18:23 · 404 阅读 · 0 评论 -
SwiftUI 内功之SwiftUI 的默认架构是什么?
SwiftUI 很棒,肯定有助于简化 iOS 应用程序的开发过程,但作为开发人员,我很想知道的一件事是。原创 2022-10-08 09:02:11 · 1171 阅读 · 0 评论 -
SwiftUI 内功之一篇文章全面掌握Swift 初始化器(教程含源码)
Swift 初始化器也可以接受一个或多个参数。这种初始化器称为参数化初始化器(带参数的初始化器)。让我们看一个例子,...}}这里,init(length: Double)- 带参数长度的初始化器var wall1 = Wall(length: 10.5)- 将值10.5传递给参数长度self.length = length- 将长度参数 ( 10.5 ) 的值分配给长度属性self.length- 指定长度属性与当前对象关联,即 wall1。原创 2022-09-30 08:15:52 · 681 阅读 · 0 评论 -
SwiftUI Xcode技巧大全之最喜欢的 Xcode 快捷方式和技巧这帮助我加快了我的日常发展
我从其他熟练的开发人员那里看到的一件事是在编码时永远不会离开键盘的能力。Xcode 有很多快捷方式,我想和你分享一些我最喜欢的。我希望这对您有所帮助,就像对我加快日常开发一样。但首先,让我们了解一下 Mac 键盘符号。原创 2022-09-15 09:38:34 · 384 阅读 · 0 评论 -
SwiftUI 内功之探索 SwiftUI 中的渲染,了解 SwiftUI 何时重新渲染子视图
软件工程专业令人惊奇的方面之一是您永远不会停止学习。你每天都会接触到不同的技术:学习它们的基本概念是我个人最喜欢的事情之一。学习新技术最重要的技能之一是识别模式和相似性的能力。即使您不是每天都使用它,这也可以让您对新技术进行推理。一周前,我的一位同事给我发了一篇关于 React 渲染的文章。我不是每天都使用 React,但我熟悉它的基本概念,我没有注意到它与 SwiftUI 有多么相似。原创 2022-09-12 07:22:26 · 319 阅读 · 0 评论 -
SwiftUI 手势大全之可用的手势类型有哪些(教程含源码)
当我们点击下面texttapped的代码时,只有输出VStacktapped不会被调用。我们只是添加了一些计数onTapGesture,所以当我们点击==计数时它会触发。如果有时我们需要同时触发,我们将使用simultaneousGesture。onChanged是在拖动时,onEnded是在拖动结束时。onTapGesture将在点击发生时触发。点击Hello,world!长按Hello,world!我们还可以添加一些长按时间。在视图中拖动或滑动时将触发。当我们长按时会触发。...原创 2022-07-29 20:06:07 · 492 阅读 · 0 评论 -
SwiftUI Apple App Store 发布App的初学者完整指南
收集AppStore信息创建捆绑标识符创建证书签名请求创建AppStore生产证书创建生产供应配置文件创建应用商店列表创建发布版本填写版本信息提交版本以供审核发布。原创 2022-07-29 19:45:03 · 468 阅读 · 0 评论 -
SwiftUI Swift 5.7 新功能大全,告诉什么时候Swift直接调用C++
Apple对Swift的愿景是高效执行和可扩展。Swift5.7进行了重大更改,以提高语言性能和生活质量,例如iflet速记语法。因此,让我们更深入地了解新Swift版本中的改进和变化。原创 2022-07-27 09:15:50 · 731 阅读 · 0 评论 -
SwiftUI Swift 中的数据持久性,保存数据的不同方法
通过数据持久性,您可以将数据保存在某种存储介质上。这可能是硬盘驱动器或云服务器之类的东西,可以随意存储和检索信息。我们如何使用Swift保存数据?好吧,这取决于您希望保存信息的持久性。Swift中有三种不同类型的数据持久化方法从磁盘读取文件、将对象存储到NSUserDefaults以及将CoreData用于更复杂的应用程序。除了这三种方法之外,还有其他方法可以存储信息以供以后使用(例如使用iCloud)。但是,这些超出了我们将在此处介绍的范围。...原创 2022-07-17 15:32:35 · 1875 阅读 · 1 评论 -
SwiftUI 内功之Swift 中的访问级别private, file-private, public, internal, open
Swift 编程语言有 5 种不同的访问说明符。按照从最不严格到最严格的限制顺序:在我们声明一个属性、一个类等的情况下,我们不需要编写访问说明符。默认情况下,访问说明符设置为internal。您可以将特定的访问级别分配给各个类型,例如类、结构、枚举、属性、方法、初始化程序和下标。我们为什么要使用它们?代码可重用性和安全性,这是访问级别的两个主要概念。现在让我们仔细看看它们中的每一个。限制较少的访问级别。通过将实体公开,您可以使其被同一模块内的其他代码部分以及其他模块访问。例如,您将一个库作为 Swift 包原创 2022-07-13 07:04:19 · 385 阅读 · 0 评论 -
苹果开发新技能之 关于 iOS/macOS 上的 Web 推送你需要知道的一切
Apple在 WWDC22 上宣布Web Push 终于来到了 Safari。它已经在 macOS 上的 Safari 16 Beta 中可用。明年,它也将登陆 iOS 和 iPadOS。iOS 推送通知是迄今为止最受欢迎的功能。并且有充分的理由——PWA 越来越成为标准 Google Play/App Store 应用范式的可行替代方案:推送通知是一个瓶颈。以前只能在 Android、Windows 和 macOS(通过 Chrome)上使用,iOS 缺乏支持意味着整个平台根本无法发送通知。有了 Appl原创 2022-07-11 10:42:04 · 814 阅读 · 0 评论 -
苹果开发新技能之 LLDB Xcode 调试提示和技巧
LLDB 是 Xcode 附带的底层调试技术。LLDB 允许您在应用程序中设置断点、暂停其执行、检查变量和对象的状态、探索您的代码等等。LLDB 可以帮助您了解您的代码在做什么,它使您能够找到您的代码行为与您的预期不同的点。作为一个懒惰的软件工程师,我总是寻找捷径来完成我的任务。由于我们有一半的时间都在调试,所以让我与您分享一些我在过去的编程年中学到的调试技巧,或者我应该说是调试年。对于本文,假设我们有这个简单的结构:po command::其中最著名的是“表达式-对象描述”的别名,在断点范围内打印给定原创 2022-07-11 10:23:29 · 527 阅读 · 0 评论 -
苹果新功能之Continuity Camera连续性摄像头,是拯救者还是革新者
人们从未像在旧石器时代的某个时候推出第一台网络摄像头时那样如此关心摄像头。好吧,有点晚了,但我想我们都同意——可能比以往任何其他相机都售出更多的网络摄像头。它们很便宜,而且通常很小——我的意思是,如果你买过 Raspberry Pi 相机,你就会知道我在说什么——而且它们无处不在。自 1994 年的 Connectix Quickcam 以来,发生了很多事情,但包括我自己在内的一些人会争辩说,发生的事情还不够多。你猜怎么着?有史以来第一次,Apple 同意了!有点儿…笔记本相机的质量远不及手机的后置摄像原创 2022-07-11 10:04:18 · 1425 阅读 · 0 评论 -
SwiftUI Xcode教程之在 iOS 中使用Schemes 和 .xcconfig 文件来组织构建交付
很多时候,我们需要组织我们的移动交付。这意味着,我们用于在 App Store 中发布我们的应用程序的版本,或者我们每天用于在本地构建我们的应用程序,或在我们公司内部分发的版本是不一样的。在这里,我们将看到一种更好地组织我们的应用程序交付的方法,并开始在我们日常工作中有意义的内部配置中组织它。构建方案基本上是与目标相关的配置以及我们可能需要的该目标的任何配置。这包括环境变量、配置文件或任何可以使构建可定制的东西。例如,我们可以有以下三种方案:这种在构建配置方面的关注点分离可以帮助我们定制应用程序的体验。使用原创 2022-07-11 07:04:25 · 324 阅读 · 0 评论 -
算法是背后的故事,优秀程序到底需不需要学习
国外开发者分享算法是背后的故事,优秀程序到底需不需要学习算法:在计算或其他解决问题的操作(尤其是计算机)中要遵循的过程或规则集。根据上面的定义,我们实际上可以将所有/大多数代码归类为算法,即计算机执行的规则集。这不是这篇文章的内容。本文将涉及业界最近对 Big-O 表示法、离散数学问题、算法运行速度等的痴迷。你看,在早期(1970 年代至 1990 年代),当计算机硬件严重受限时,优化你的算法以使您的代码运行得更快并使您的软件可用。90 年代的游戏程序员站在优化战的最前线。他们同时在处理劣质硬件(.原创 2022-05-14 08:33:51 · 224 阅读 · 0 评论 -
SwiftUI 高代码质量编程技巧之 03 使用多行字符串引用
系列文章01 使用初始化注入而不是可选值02 使用filter/reduce/map代替for循环,更清晰直观03 使用多行字符串引用04 限制参数个数,参数太多,可以使用自定义类型05 使用标准库提供的高阶函数06 纯静态类型避免使用类,使用枚举07 避免使用NSObject08 关闭前使用 let03 使用多行字符串引用let str = """123.456.789."""...原创 2022-05-13 17:38:04 · 343 阅读 · 0 评论 -
SwiftUI 高代码质量编程技巧之 02 使用filter/reduce/map代替for循环,更清晰直观
系列文章01 使用初始化注入而不是可选值02 使用filter/reduce/map代替for循环,更清晰直观03 使用多行字符串引用04 限制参数个数,参数太多,可以使用自定义类型05 使用标准库提供的高阶函数06 纯静态类型避免使用类,使用枚举07 避免使用NSObject08 关闭前使用 let2. 使用filter/reduce/map代替for循环,更清晰直观/// ❌let nums = [1, 2, 3]var result = []for num in nums原创 2022-05-13 17:35:39 · 352 阅读 · 0 评论 -
SwiftUI 高代码质量编程技巧之 01 使用初始化注入而不是可选值
系列文章01 使用初始化注入而不是可选值02 使用filter/reduce/map代替for循环,更清晰直观03 使用多行字符串引用04 限制参数个数,参数太多,可以使用自定义类型05 使用标准库提供的高阶函数06 纯静态类型避免使用类,使用枚举07 避免使用NSObject08 关闭前使用 let1. 使用初始化注入而不是可选值/// ❌class Info { var num: Int?}let info = Info()info.num = 1/// ✅cl原创 2022-05-13 09:41:28 · 259 阅读 · 0 评论