Swift Combine 响应式 Demo

SwiftUI Combine学习记录(一) 几个月前开始学习Combine,看了不少视频和文章,也做了几个使用Combine的demo,如用户名密码检验、搜索栏等,但总是感觉无法真正领会Combine的精髓。在此做些学习的记录,争取可以全面的掌握这门swiftui的核心框架。 Combine 在官方文档,Combine的定义为:“通过组合事件处理运算符自定义异步事件的处理。” Combine 框架提供了一个声明性的 Swift API,用于随着时间的推移处理值。这些值可以表示多种异步事件。 Combine 声明发布者公开可随时间变化的值,订阅者 阅读详情

一个Combine Demo。
Combine是苹果发布的响应式框架,iOS13一起发布的,所以最低iOS13才能使用。

做了一个简单登录界面的异步处理演示。

demo image

页面逻辑说明:

  1. 获取验证码按钮是否启用(isEnabled)跟手机号输入框值是否有效有关。输入11位长度字符串获取验证码按钮isEnabled变为true。

  2. 登录按钮是否启用(isEnabled)跟三个控件状态或值相关联,分别是:手机号输入框内容、验证码输入框内容以及同意隐私政策开关。三个控件同时满足校验才能改登录按钮isEnabled位true。

代码部分

创建三个用@Published修饰的变量,用于接受控件内容

@Published var phone: String? = ""
@Published var verifyCode: String? = ""
@Published var isAgree: Bool = false

@IBAction func phoneChanged(_ sender: UITextField) { phone = sender.text }
@IBAction func verifyCodeChanged(_ sender: UITextField) { verifyCode = sender.text }
@IBAction func agreeChanged(_ sender: UISwitch) { isAgree = sender.isOn }

创建校验手机号发布者,输出值为布尔类型

// 校验手机号的发布者
var phoneValid: AnyPublisher<Bool, Never> {
    $phone
        .map { $0?.count == 11 ? true : false }
        .eraseToAnyPublisher()
    }

创建校验验证码发布者

// 校验验证码的发布者
var verifyCodeValid: AnyPublisher<Bool, Never> {
    $verifyCode
        .map { code in
            guard                   // 验证码校验逻辑(实际情况按照需求自定义)
                let code = code,    // 值不能为nil
                code.count == 4,    // 长度为4
                let _ = Int(code)   // 能转为Int
            else { return false }   // 以上三种全部满足返回true,否则返回false

            return true
        }
        .eraseToAnyPublisher()      // 抹去类型转为AnyPublisher
}

合并三个发布者 - CombineLatest

// 融合三个发布者
Publishers.CombineLatest3(phoneValid, verifyCodeValid, $isAgree)
    .map { $0 && $1 && $2 }                 // 筛选逻辑
    .receive(on: RunLoop.main)              // 在主线程接受
    .assign(to: \.isEnabled, on: toLogin)   // 结果分配
    .store(in: &subscriptions)              // 返回值Cancellable对象储存在全局容器中

Demo代码地址

Swift iOS开发实战:从ARC内存管理到App Store审核避坑指南 Swift作为iOS开发的核心语言,其价值远不止类型安全与语法简洁——它深度耦合UIKit生命周期、ARC内存模型与结构化并发机制。理解Optional如何根治空值崩溃、Result与async/await如何重构异步错误处理、@StateObject与@Binding如何划定状态边界,是构建高稳定性App的基础。尤其在真实生产环境中,内存泄漏、SIGABRT崩溃、网络超时、Preview预览失败等高频问题,本质都源于对Swift与iOS平台协同逻辑的误读。本文聚焦Swift在UIKit和SwiftUI双栈 阅读详情

相关推荐

ModernMVVM:使用MVVM架构,Combine和SwiftUI框架构建的电影iOS应用https

与该项目有关的文章 。 现代MVVM 一个示例项目演示了使用MVVM架构模式,Combine和SwiftUI框架构建iOS应用的现代方法。 该应用程序遵循单向数据流,并显示如何使用将UI表示为React性有限状态机。

[Swift 开发] Combine使用方法

Combine基本用法。

u010130947的专栏 2886

swift-使用GitHubAPI基于SwiftUIMVVM和Combine框架构建的iOS示例项目

使用GitHub API基于SwiftUI MVVM和Combine框架构建的iOS示例项目

php swift 注册登录,Swift - RxSwift的使用详解54(一个用户注册样例1:基本功能实现)...

本文同样是一个 MVVM 架构的样例(使用 Driver)。主要演示的是输入内容的条件验证,以及验证结果与视图的绑定。1,效果图(1)这个是官方的演示样例(我稍作修改),主要用来模拟用户注册流程。(2)默认“注册”按钮不可用,只有用户名、密码、再次输入密码三者都符合如下条件时才可用:输入用户名时会同步检查该用户名是否符合条件(只能为数字或字母),以及是否已存在(网络请求),并在输入框下方显示验证结...

weixin_39778150的博客 501

Nvidia Jetson CH340 驱动安装

最近调一个USB设备,Windows系统上是可以安装CH340 驱动使用的,移到Jetson AGX Orin 上发现没有 /dev/ttyUSB* 设备显示。是一个为盲人和视力障碍者提供的终端设备驱动程序,它会在系统启动时自动加载并占用串口设备,导致我们无法正常使用部分串口设备。安装完后,内核中已经有。

Vulcan_S的博客 1638

FastBuilding 3DMAX插件:批量生成配楼,让建筑可视化告别手动重复建模

在建筑可视化与城市规划项目中,配楼群是营造城市氛围和方案完整度的关键,但几十上百栋配楼的建模往往成为工期瓶颈。传统复制粘贴或BOX贴图方式无法兼顾真实感与效率。FastBuilding作为一款3DMAX插件,通过参数化生成逻辑,将配楼制作转化为可调控的流水线:设定层高、面宽、窗户密度等参数,即可在视口内实时生成带完整外立面细节的实体模型;支持点选拉框和样条线批量生成两种模式,配合随机种子可快速产出丰富而不失协调的建筑群。该插件不仅面数控制合理,生成模型仍可继续编辑,尤其适合住宅区鸟瞰、规划投标及远景天际线等

weixin_28520495的博客 249

Combine简介(1)

Combine 是苹果公司在 WWDC 2019 推出的一个函数式响应编程(FRP)框架,主要用于 Swift 开发中处理异步数据流和事件。它简化了数据流管理,将异步操作(例如网络请求、用户交互、通知等)通过声明式编程模型进行组合和处理。

琥珀的博客 642

Wio-LR1121多频段LoRa模块技术解析与应用实践

LoRa技术作为低功耗广域物联网(LPWAN)的核心通信方案,通过独特的扩频调制技术实现远距离传输与强抗干扰能力。其工作原理基于CSS(Chirp Spread Spectrum)调制,支持动态调整扩频因子(SF)和带宽(BW)来平衡传输距离与数据速率。Wio-LR1121模块作为Semtech LR1121芯片的载体,创新性地整合了sub-GHz、S-Band和2.4GHz多频段支持,配合仅1.35μA的睡眠电流,为跨境物联网部署提供了硬件基础。在智慧农业、工业监测等场景中,开发者可通过SPI接口快速集成

weixin_33742618的博客 415

终极指南:ATV-Bilibili-demo视频播放器视图模型设计模式详解

ATV-Bilibili-demo是一款专为Apple TV设计的Bilibili客户端演示项目,其核心功能在于提供流畅的视频播放体验。本文将深入剖析该项目中视频播放器视图模型的设计模式,揭示如何通过优雅的架构实现高效的视频内容管理与播放控制。 ## 📱 项目概览:打造Apple TV上的B站体验 ATV-Bilibili-demo项目采用模块化设计,将视频播放功能封装在独立组件中。从项目结

gitblog_00580的博客 1045

机械臂学习:视觉引导——绪论

视觉引导 = 定位 + 引导定位:视觉系统定位到待引导的物体引导:视觉系统引导机械臂按需要的轨迹实现一定的工艺流程(过度点:人为指定机械臂的轨迹防止碰撞)(点云匹配:解决位姿估计姿态估计的问题)无序抓取的三个核心技术:3d识别(图中的点云匹配) 抓取方法路径规划(防止机械臂的碰撞,如自身碰撞等)如果只有同一高度的平移和旋转,其实并不需要点云,用单目就可以做,但是如果涉及到物体的倾斜以及高度的变换,那就是单目力所不能及,所以就是第三种情况:平移旋转加垫高。

2303_80018785的博客 4044

物理与工程中的‘黑话’:Kronecker delta和Levi-Civita符号到底简化了什么?

本文深入解析了物理与工程中常用的Kronecker delta和Levi-Civita符号的简化作用。通过对比传统表示与张量表示,展示了这些符号在向量运算、矩阵迹计算及流体力学模拟中的高效应用,显著提升计算效率和代码可读性。特别适合理论物理和工程数学领域的学习者与从业者。

weixin_27215403的博客 397

干货 | 深入浅出Apple响应式框架Combine

作者简介青花瓷的平方,携程技术专家,主要从事无线开发,负责携程支付iOS相关开发工作。一、引言Combine.framework 是Apple在2019 WWDC 上基于Swift推出...

携程技术 3746

多任务学习中的过拟合陷阱:动态停止训练机制详解与避坑指南

本文深入剖析了多任务学习中因任务过拟合不同步导致的性能下降问题,并详细介绍了动态停止-继续训练机制。该机制通过为每个任务设置独立的训练开关,基于验证集性能动态控制其梯度更新,有效缓解了任务间负迁移,是提升多任务模型整体泛化能力的关键策略。

happy2的博客 1092

Swift-DEMO 开源项目教程

Swift-DEMO 开源项目教程 项目介绍 Swift-DEMO 是一个展示 Swift 编程语言基础用法的开源项目。该项目旨在帮助初学者快速理解 Swift 的基本语法和编程概念,通过一系列示例代码来展示如何实现常见的编程任务。 项目快速启动 环境准备 在开始之前,请确保您的开发环境已经安装了 Xcode,并且您已经熟悉了基本的 Swift 编程知识。 克隆项目 首先,克隆项目到本地: git...

gitblog_00850的博客 564

【ARM CoreLink 系列 5.3 -- CI-700 SLC memory 系统组件详细介绍】

在 CI-700 系统级缓存(SLC)内存系统中,HN-F 节点负责管理缓存一致性和数据传输。每个 HN-F 节点可以发送三种类型的 Snoop 请求,以确保系统中多核处理器和缓存之间的一致性。CI-700 中的系统级缓存(SLC)内存系统通过 HN-F 节点支持 TrustZone® 技术。以下是 CI-700 支持的 SN 类型以及配置方法的简要介绍。ARM CI-700 系统级缓存(SLC)是一个分布式、主要排他性(mostly exclusive) 的最后一级缓存,集成在 HN-F 节点内。

CodingCos的博客 897

详解【计算机类&面试真题】军队文职考试——第7期:C盘格式化需要注意什么?| 两台笔记本连起来后ping不同,可能存在哪些问题?| 模拟信号到数字信号是如何转化的?| 计算机由哪些部件组成?

这是我分享的系列面试知识——军队文职(计算机类)面试真题详解(第7期)。本期分享:两台笔记本连起来后ping不同,你觉得可能存在哪些问题?模拟信号到数字信号是如何转化的?谈一谈计算机由哪些部件组成?如何加强计算机网络安全管理?若通过域名无法访问,而通过IP地址能访问。这是怎么回事?你将如何解决?谈一谈C盘格式化需要注意什么?开放类题目:如果应聘的岗位和你想的差距很远,你怎么办?

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1917

【亲测免费】 MVVM Demo SwiftUI 项目教程

MVVM Demo SwiftUI 是一个展示如何使用 SwiftUI、MVVM 架构和 Combine 框架的开源项目。该项目旨在帮助开发者理解和实践 MVVM 设计模式,通过 SwiftUI 构建高效且易于维护的应用程序。 ## 项目快速启动 ### 环境要求 - Xcode 12 或更高版本 - iOS 14 或更高版本 ### 克隆项目 首先,克隆项目到本地: ```bash git

gitblog_01169的博客 616

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

深度解析GRDB.swift:为什么选择它作为iOS应用数据持久化的终极解决方案

在iOS应用开发中,数据持久化是构建可靠应用的核心环节。面对UserDefaults、Core Data、Realm和SQLite等众多选择,开发者常常陷入选择困境。GRDB.swift作为一款专为Swift设计的SQLite数据库访问库,以其高效的内存管理、灵活的查询接口和现代化的Swift API,成为众多技术团队的优选方案。本文将深入剖析GRDB.swift的核心优势,探讨其技术实现原理,并

gitblog_01151的博客 836

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

终极指南:ATV-Bilibili-demo中Published属性包装器的高级用法与持久化技巧

ATV-Bilibili-demo是一款专为Apple TV打造的B站客户端演示项目,通过优雅的Swift代码实现了流畅的视频播放体验。本文将深入解析项目中自定义的`Published`属性包装器扩展,展示如何通过一行代码实现数据持久化,让tvOS应用开发更高效。 [![B站tvOS应用界面展示](https://raw.gitcode.com/GitHub_Trending/at/ATV-Bi

gitblog_00815的博客 307

想成为顶尖iOS开发者?你必须知道的Swift学习5大黄金法则

掌握Swift程序员学习路线,快速进阶顶尖iOS开发者。本文分享5大黄金法则,涵盖语法精进、实战项目、性能优化等关键环节,助你系统掌握iOS开发核心技能。方法实用,路径清晰,值得收藏。

FuncFun的博客 738

【亲测免费】 探索 SwiftUI 打造的优雅Todo应用:Todolist-SwiftUI

探索 SwiftUI 打造的优雅Todo应用:Todolist-SwiftUI 项目简介 是一个由 SwiftUI 框架构建的简单且实用的待办事项应用程序。该项目旨在展示如何利用 SwiftUI 的强大功能和易用性来创建美观且响应式的用户界面,并提供了一种轻量级的方式来管理日常任务。 技术分析 SwiftUI SwiftUI 是苹果推出的一种声明式 UI 架构,它允许开发者以更直观、简洁的方式描述...

gitblog_00006的博客 440

macOS基础组件之文本编辑器MacEditorTextView

实战需求 解决基础文本编辑功能 实战代码 // MacEditorView.swift // mac_preview_demo // // Created by cf on 2020/8/16. // import Foundation import Combine import SwiftUI struct MacEditorTextView: NSViewRepresentable { @Binding var text: String var isEditable: Bool

iCloudEnd的博客 888

iOSDesignPatternSamples代码实战:手把手教你实现MVVM架构的GitHub搜索

iOSDesignPatternSamples是一个GitHub用户搜索演示应用,它通过多种设计模式实现,让开发者可以直观比较MVC、MVP、MVVM和Flux等架构的差异。本文将聚焦于MVVM架构,带你一步步实现GitHub搜索功能,掌握这种高效的iOS应用架构模式。 ## 📱 MVVM架构简介:为什么它比MVC更适合现代iOS开发 MVVM(Model-View-ViewModel)架构

gitblog_00296的博客 330

如何将Mac触控板变成精准电子秤:TrackWeight完整使用指南

你是否曾想过,你的MacBook触控板除了点击和滑动,还能做什么?TrackWeight这款创新的macOS应用给出了令人惊喜的答案:它能将你的MacBook触控板变成一个精准的电子秤!通过巧妙利用MacBook内置的Force Touch压力传感器,TrackWeight实现了从输入设备到测量工具的惊人转变,让日常称重变得前所未有的便捷。 ## 🎯 TrackWeight核心功能详解 ##

gitblog_00330的博客 463

iOS MVVM架构实战:从MVC到ViewModel的列表开发完整指南

在iOS开发中,软件架构是构建可维护、可测试应用的核心基础。传统MVC模式常因Controller职责过重导致代码臃肿,尤其在数据驱动的列表页面中问题凸显。MVVM(Model-View-ViewModel)架构通过引入ViewModel层,将数据处理、状态管理和业务逻辑从View中剥离,实现了清晰的关注点分离。其技术价值在于提升代码的可测试性、可维护性和团队协作效率,特别适用于新闻流、商品列表、社交动态等需要处理复杂数据流与用户交互的场景。本文以**UIKit列表开发**为例,通过**手动数据绑定**机制

weixin_33675507的博客 370

iOS-MVP-Clean-Architecture重构技巧:从MVC迁移到MVP+Clean架构的实用指南

在iOS开发中,选择合适的架构模式对于项目的可维护性和可测试性至关重要。本文将为您详细介绍如何从传统的MVC架构迁移到更现代的MVP+Clean架构组合,通过实际的项目示例展示这种重构技巧的优势和实现方法。iOS-MVP-Clean-Architecture是一种结合了MVP(Model-View-Presenter)和Clean Architecture的优秀实践,能够显著提升代码质量和团队协作

gitblog_00573的博客 830
上一篇: Cocoapods私有库搭建以及podspec文件验证
garvinbao
博客等级 码龄10年 21粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值