- 博客(244)
- 资源 (12)
- 收藏
- 关注
原创 Swift6.0 - 5、基本运算符
Swift运算符分为基本运算符、算术运算符、比较运算符等。基本运算符包括赋值(=)、算术(+、-、*、/、%)和比较(==、>等)。Swift改进了C语言的运算符,如赋值运算符不返回值以避免错误。还新增了区间运算符(..<、...)。运算符分为一元、二元和三元,三元条件运算符(a ? b : c)是唯一的三元运算符。算术运算符禁止值溢出,支持字符串拼接。比较运算符返回布尔值,支持元组比较。三元运算符简化条件判断,如rowHeight = contentHeight + (hasHeader ?
2025-07-16 21:06:59
473
原创 Swift6.0基础 -- 4、元组、错误处理、断言和先决条件
本文介绍了Swift中的三个重要特性:元组、错误处理以及断言和先决条件。1. 元组允许多个不同类型值组合成一个复合值,支持分解、索引访问和命名元素访问,常用于函数返回值;2. 错误处理通过throws、try和do-catch机制实现,可捕获和处理函数执行中的错误;3. 断言和先决条件用于运行时检查条件,断言仅在调试模式下生效,而先决条件在生产和调试模式下都有效,确保程序状态正确。这些特性共同增强了Swift代码的安全性和可维护性。
2025-07-16 19:56:04
161
原创 Swift6.0基础知识 -- 可选2
Swift 中的可选类型(Optional)用于处理值缺失的情况,表示一个值可能存在或不存在。可选类型通过在类型后加问号(?)声明,如 Int?。可以通过以下方式处理可选值: nil:表示无值状态,任何可选类型都可以赋值为 nil。 可选绑定:使用 if let 或 guard let 安全解包可选值,仅在值存在时执行代码。 后备值:使用 ?? 提供默认值,当可选为 nil 时使用后备值。 强制解包:使用 ! 直接解包,但若值为 nil 会引发运行时错误。 隐式解包:声明为 Type!,假定后续始终有值,无
2025-07-16 19:41:25
605
原创 Swift6.0基础知识 -- 3、基本数据类型1
Swift 基础数据类型与变量 Swift 提供了丰富的数据类型系统,包括基本类型(Int、Double、Bool、String)和集合类型(Array、Set、Dictionary)。使用 let 声明常量,var 声明变量,支持类型注解和类型推断。Swift 具有类型安全特性,能防止类型错误。此外,Swift 引入了元组和可选类型等高级特性,支持字符串插值和嵌套注释。整数类型提供边界检查功能,Int 类型自动适配平台字长。代码中分号可选,但同一行多语句需用分号分隔。
2025-07-16 19:00:26
248
原创 Swift基础 -- 3、协议和扩展、错误处理、范型
本文介绍了Swift中的协议、错误处理和泛型三大特性。1) 协议通过protocol定义,可以被类、结构体和枚举遵循,使用extension可为现有类型添加协议遵循;2) 错误处理使用遵循Error协议的枚举表示错误,通过do-catch或try?处理,defer确保代码最终执行;3) 泛型使用尖括号<>定义,支持函数和类型的泛型化,where子句可添加类型约束。这些特性共同增强了Swift代码的灵活性、安全性和可重用性。
2025-07-16 16:01:01
99
原创 Swift基础 -- 2、对象和类、枚举和结构体、并发性
本文介绍了Swift中类和枚举的基本用法。在类部分,详细说明了类的定义、属性声明、方法创建、构造器(init)和析构器(deinit)的使用,以及继承和重写(override)的注意事项。文中还展示了计算属性(getter/setter)和属性观察器(willSet/didSet)的实现方式。在枚举部分,讲解了如何定义带有原始值的枚举(enum),包括访问原始值(rawValue)和通过原始值初始化枚举实例的方法。文章通过多个代码示例(如Shape、Square、Rank等)演示了这些概念的实际应用,并提供
2025-07-16 15:54:33
414
原创 Swift基础 -- 1、简单值、控制流、函数和闭包
摘要:Swift 入门教程介绍了基础语法和特性。通过"Hello, world!"示例展示Swift的简洁性,无需main函数和分号。讲解了变量/常量声明(let/var)、类型推断、字符串插值、多行字符串和集合类型(数组/字典)。控制流部分涵盖if/switch条件语句,for/while循环,以及可选值的处理(if let/??)。特别说明了Swift的强类型特性,需要显式类型转换,并提供了多个练习帮助理解。还演示了范围运算符(..<)和字典遍历等实用技巧。
2025-07-16 15:51:20
446
原创 Flutter Socket 连接方案分析与适用场景
【Flutter Socket连接方案对比与实现】 本文对比了五种Flutter网络连接方案: 1️⃣ 原生Socket:适合IoT/自定义协议,提供高性能但需手动处理细节 2️⃣ WebSocket:推荐用于实时应用,支持双向通信且简单易用 3️⃣ Socket.IO:适合复杂实时应用,自带重连和房间管理功能 4️⃣ gRPC:适用于微服务通信,提供强类型接口 5️⃣ MQTT:专为IoT设计,支持低带宽环境 重点分析了前三种方案的实现代码,包括: 原生Socket的TCP/UDP连接管理 WebSock
2025-07-15 16:35:24
562
原创 Flutter 股票图实现分析与解决方案
本文介绍了Flutter中实现专业级K线图的最佳方案。推荐使用fl_chart库,该库提供完整的K线图支持、多种技术指标、高性能渲染和丰富交互功能。文章详细展示了代码结构,包括蜡烛图绘制、涨跌颜色区分、移动平均线计算等核心功能实现,并提供了触摸交互和工具提示的优化方案。在性能优化方面,建议采用数据分页加载、Canvas缓存和简化渲染等技巧。最后推荐了两个高质量的开源实现参考:fl_chart官方示例和StockChart高级实现,可作为完整解决方案。
2025-07-15 15:05:08
228
原创 Swift实现股票图:从基础到高级
本文介绍了股票K线图的核心实现方案,重点讲解了使用Core Graphics的原生绘制方法。该方案具有完全可控、高性能和高度定制化的优势。文章提供了完整的Swift代码实现,包括数据结构定义、视图绘制逻辑和关键指标计算方法。代码示例展示了如何绘制K线、成交量柱状图以及网格线,并包含价格范围计算、颜色区分涨跌等核心功能。此外还预留了绘制移动平均线等指标的接口,为金融应用的图表开发提供了实用参考方案。
2025-07-15 14:29:04
290
原创 SwiftUI 常用控件分类与使用指南
SwiftUI控件分类及使用示例摘要: 本文系统介绍了SwiftUI的核心控件,按功能分为七大类:1)文本显示控件(Text,Label,Link)的样式设置;2)图片显示控件(Image,AsyncImage)的加载与裁剪;3)按钮与交互控件(Button,Menu,ContextMenu)的点击事件处理;4)输入控件(TextField,TextEditor,SecureField)的文本输入;5)选择器控件(Toggle,Picker,Slider,Stepper,DatePicker)的值选择;6)
2025-07-14 18:14:36
522
原创 SwiftUI 全面介绍与使用指南
SwiftUI是苹果2019年推出的跨平台UI框架,采用声明式语法构建应用界面。其主要优势包括:实时预览、自动UI更新、跨平台支持和简单动画实现。基础组件涵盖文本、按钮、图片和输入框等,通过VStack、HStack和ZStack实现灵活布局。状态管理使用@State和@StateObject等属性包装器,支持数据绑定和状态共享。列表视图(List)配合NavigationStack实现导航功能,Toolbar添加导航栏按钮。SwiftUI通过组合简单组件构建复杂界面,大幅提升开发效率,统一了苹果各平台的U
2025-07-14 17:47:09
857
原创 Combine的介绍与使用
Combine是Apple推出的声明式响应式编程框架,专为Swift设计,适用于iOS 13+和macOS 10.15+。核心概念包括Publisher(数据生产者)、Subscriber(数据消费者)、Operator(数据转换)和Subject(手动发送值)。框架支持链式调用操作符进行数据处理,如map、filter等,并能处理网络请求、错误处理和多个Publisher的组合。在UIKit和SwiftUI中,Combine可实现数据绑定和状态管理,例如文本输入实时搜索和列表更新。其统一API简化了异步事
2025-07-14 17:26:36
528
原创 RxSwift的介绍与使用
RxSwift是Swift的响应式编程框架,基于ReactiveX标准实现,通过观察者模式简化异步事件处理。核心概念包括Observable(数据源)、Observer(订阅者)、Operator(操作符)等。基础用法涵盖事件订阅、链式操作、UI绑定和网络请求等场景,支持线程切换和请求组合。RxSwift适用于实时搜索、表单验证、状态管理等复杂异步操作,可通过CocoaPods或SPM安装。虽然学习曲线较陡,但配合可视化工具能有效提升开发效率。
2025-07-14 16:59:12
736
原创 SnapKit介绍与使用
SnapKit是Swift开发的优雅自动布局框架,提供简洁的链式语法和类型安全特性,比原生NSLayoutConstraints代码量减少70%以上。支持iOS/macOS/tvOS平台,可通过CocoaPods或Swift Package Manager安装。核心功能包括居中布局、相对视图排列、比例约束和优先级设置,还能保存约束引用实现动态更新。示例展示了基本居中视图、多视图排列、比例布局、约束更新动画以及复杂个人资料卡片布局的实现方式,显著简化了AutoLayout的开发流程。
2025-07-14 16:08:06
653
原创 在加载图片的时候滑动tableview,图片加载会出现错乱是什么原因,怎么处理
UITableView滑动时图片错乱问题主要由Cell重用机制和异步加载时序导致。解决方案包括:1)在prepareForReuse中取消旧请求;2)使用Kingfisher/SDWebImage等库自动处理;3)加载前重置占位图;4)绑定数据模型校验。关键原则是取消无效请求、验证状态一致性、使用占位图并避免阻塞主线程。推荐结合第三方库的缓存和优先级控制功能优化性能,确保快速滑动时图片正确显示。
2025-07-14 15:38:32
417
原创 oc分类和swift扩展有哪些区别
特性Objective-C 分类Swift 扩展作用对象仅 Objective-C 类类、结构体、枚举、协议存储属性❌(需关联对象模拟)❌计算属性❌✅方法覆盖⚠️ 允许(有风险)❌ 编译禁止协议默认实现❌✅泛型支持❌✅(通过**where**子句)安全性低(运行时冲突)高(编译时检查)需动态添加属性/覆盖方法 →Objective-C 分类(需谨慎)。需类型安全/添加计算逻辑/扩展协议 →Swift 扩展。
2025-07-12 20:40:08
872
原创 使用包管理工具CocoaPods、SPM、Carthage的利弊与趋势
iOS/macOS开发中三大依赖管理工具对比: CocoaPods:成熟稳定,自动集成但性能较差,适合中小项目; SPM:Apple官方方案,轻量高效但功能有限,推荐新项目使用; Carthage:非侵入式设计,适合大型项目但需手动配置。 2023年使用率显示SPM(82%)上升最快,CocoaPods(58%)下降。迁移建议:新项目首选SPM,旧项目可混合使用SPM+CocoaPods/Carthage,逐步向纯SPM过渡。
2025-07-12 19:46:27
616
原创 defer关键字
Swift中的defer关键字用于在作用域退出前执行代码块,确保清理操作始终被执行。核心特性包括:延迟执行(逆序执行多个defer)、作用域绑定。主要应用场景为资源清理、锁管理、错误处理和状态恢复。需要注意作用域规则、返回值影响、循环行为等细节。相比Java和Python的类似机制,Swift的defer更加灵活,可用于任意作用域。最佳实践包括保持defer块简洁、正确处理资源依赖关系以及与do-catch配合使用。defer是Swift实现资源管理安全性和代码可读性的重要工具。
2025-07-11 16:36:51
327
原创 SwiftUI视图更新流程
SwiftUI视图构建流程解析:从状态变更到屏幕渲染 SwiftUI采用高效的声明式UI设计,其视图更新流程包含状态变更、依赖跟踪、差异比较和渲染四个关键阶段。当状态变化时,SwiftUI的依赖跟踪系统会标记受影响视图,视图树管理器将更新请求加入队列。差异引擎通过结构相等性检查比较新旧视图树,仅对有变化的视图执行body计算,最终生成最小变更集提交渲染。优化手段包括惰性求值、批量更新、稳定视图标识等。开发者应注意保持body轻量、合理使用状态管理,并利用事务控制动画行为。这种按需更新机制显著提升了复杂界面的
2025-07-11 16:16:40
1006
原创 SwiftUI的页面生命周期
SwiftUI 视图生命周期解析 SwiftUI采用声明式编程模型,视图生命周期与UIKit不同,主要包含以下阶段: 视图初始化 (init) 在视图首次创建或重建时调用,SwiftUI可能频繁创建视图实例 视图构建 (body) 每次状态变化都会重新计算,应保持轻量级 视图出现 (.onAppear) 相当于UIKit的viewDidAppear,适合数据加载和启动任务 视图消失 (.onDisappear) 相当于UIKit的viewDidDisappear,用于清理资源 视图更新 通过@State、@
2025-07-11 15:27:34
961
原创 swift开发,关于应用、页面、视图的生命周期
本文详细介绍了iOS开发中的生命周期管理,包括应用、页面和视图三个层次。UIKit和SwiftUI的实现方式对比鲜明:UIKit通过AppDelegate和UIViewController的明确方法管理,SwiftUI则采用声明式语法和状态驱动。关键差异在于UIKit需要手动处理视图显示/隐藏和异步任务,而SwiftUI通过.onAppear/.task等修饰符自动管理。最佳实践建议UIKit在viewDidLoad初始化数据,SwiftUI优先使用.onAppear和.task。掌握这些生命周期有助于优化
2025-07-10 19:42:25
761
原创 struct Clamped<T: Comparable> 中<T: Comparable>是什么含义
Swift泛型中的struct Clamped<T: Comparable>通过类型参数T和协议约束: Comparable实现类型安全的范围限定功能。T作为占位符类型可接受多种具体类型,而Comparable约束确保类型支持比较操作,这是实现值范围检查的关键。该机制在编译时强制类型合规性,支持数值、日期等可比较类型,若使用不符合的类型会直接报错。这种设计既保证了代码的通用性,又通过编译时检查避免了运行时错误,体现了Swift的类型安全特性。
2025-07-10 15:50:21
236
原创 swift中常见属性包装器
Swift属性包装器是Swift中强大的特性,允许在属性存储和访问间添加自定义逻辑。本文介绍了SwiftUI核心属性包装器(@State、@Binding、@ObservedObject、@EnvironmentObject)、Combine框架的@Published以及三种自定义属性包装器实现(自动大写、数值约束、线程安全)。这些特性通过封装属性访问逻辑,实现了声明式代码与逻辑复用的平衡,显著减少了模板代码量。文章还总结了各包装器的主要用途和使用场景,展示如何提升代码可维护性和可读性。
2025-07-10 15:36:26
436
原创 numbers.map { $0 * 2 }中$0的含义
0在 Swift 中,$0是一个(shorthand argument name),它是 Swift 闭包语法中的特殊简写形式。
2025-07-10 11:46:24
428
原创 函数: func add(_ a: Int) -> (Int) -> Int {{ a + $0 } } 中 _ 是什么含义
在 Swift 函数声明中,参数前的下划线 _ 作为参数标签占位符,主要作用是省略外部参数标签,使函数调用更简洁。当函数名已明确参数含义时(如数学运算),使用 _ 可以避免重复标签。在柯里化函数中,_ 保证调用链的风格统一。函数内部仍需使用参数名访问值。Swift 标准库的运算符类函数多采用这种设计,以简化语法并保持代码清晰。
2025-07-10 11:27:34
286
原创 柯里化(Currying)技术
本文详细解析了柯里化技术在Swift中的实现与应用。通过将多参数函数拆解为单参数函数链,如add(_ a: Int)返回(Int)->Int的闭包,实现了参数分离和部分应用。关键特性包括闭包捕获外部变量、参数预固定(如add(5)生成专用加法器)和模块化函数复用。典型应用场景包括创建税率计算器(固定增值税率)和序列号生成器(增量生成ID)。柯里化技术体现了函数式编程的核心优势,通过参数分解增强代码的灵活性和组合能力。
2025-07-10 11:12:17
305
原创 闭包在swift中的分类
Swift闭包主要分为六大类型:1)按语法形式分为全局函数、嵌套函数、闭包表达式和尾随闭包;2)按生命周期分为非逃逸闭包和逃逸闭包;3)特殊功能类包括自动闭包和自动逃逸闭包;4)按内存行为分为强/弱/无主引用闭包;5)按函数特性分为高阶函数闭包和柯里化闭包;6)按捕获行为分为无捕获、值捕获和引用捕获。理解这些类型有助于编写高效、安全的Swift代码,尤其在异步编程和内存管理方面。
2025-07-09 19:21:28
367
原创 闭包、自动闭包、逃逸闭包
Swift闭包有三种形式:普通闭包、自动闭包(@autoclosure)和逃逸闭包(@escaping)。普通闭包是可传递的代码块,能捕获上下文变量;自动闭包将表达式自动包装成闭包实现延迟求值,常用于日志和断言;逃逸闭包生命周期超出函数作用域,用于异步回调和存储操作。三者关键区别在于执行时机、语法形式和使用场景。自动闭包优化性能,逃逸闭包需注意内存管理。实际开发中可组合使用,如逃逸闭包+自动闭包实现异步延迟消息生成。最佳实践是优先非逃逸闭包,按需选用其他类型并注意内存安全。
2025-07-09 19:11:36
339
原创 逃逸闭包(Escaping Closure)
逃逸闭包是Swift中在函数返回后仍可调用的闭包,需用@escaping标记。主要特征包括生命周期延长和潜在内存风险。与非逃逸闭包相比,逃逸闭包需手动管理内存,常用于异步回调等场景。为避免循环引用等问题,应采用捕获列表(如[weak self])、显式声明变量、缩小捕获范围或使用结构体封装。典型应用包括异步操作、事件处理和动画回调。内存安全最佳实践包括:优先使用弱引用、避免修改外部变量、利用调试工具检查捕获情况。常见陷阱有循环引用和数据竞争,可通过适当捕获方式和同步机制解决。正确处理逃逸闭包对Swift高级
2025-07-09 17:08:50
573
原创 值类型大小与内存分配
Swift中值类型的内存分配由使用场景和编译器优化共同决定,遵循以下核心规则:1)优先栈分配,适用于局部变量和小型数据;2)特定条件下自动堆分配,如被闭包捕获、作为类属性、包含引用类型成员或大型集合类型。实际分配受结构体大小影响,经验阈值是:<64字节基本栈分配,64-256字节视上下文而定,>256字节通常堆分配。建议优化策略包括控制结构体大小、避免闭包捕获大型值、使用COW(Copy-On-Write)封装大型数据。开发者无需手动指定内存位置,理解这些规则有助于编写高性能代码和优化内存敏感场
2025-07-09 16:17:00
700
原创 值类型如何分配堆栈?
Swift中值类型的内存分配并非都在栈上,而是取决于使用场景和类型大小。小型值类型(如简单结构体)通常栈分配,而大型值类型(如大数组)实际数据存储在堆上,栈上只保留指针。被闭包捕获的值类型也会提升到堆上。建议优先使用小型值类型(小于64字节),警惕闭包捕获开销,并利用Copy-On-Write优化大型值类型。Swift通过智能分配机制(栈/堆结合)和COW优化,实现了性能与安全的平衡。
2025-07-09 12:07:55
995
原创 Swift 的值类型有哪些
Swift中的值类型(Value Types)是其核心特性之一,主要包括结构体(Struct)、枚举(Enum)和元组(Tuple)。值类型在赋值或传递时会创建独立副本,具有栈分配、线程安全和不可共享状态等特点。Swift标准库中的Array、Dictionary、Set和String等集合也属于值类型,并采用写时复制(COW)优化性能。与引用类型(Class)相比,值类型更安全且高效,适合优先使用。开发者可通过组合值类型和利用COW优化来提升性能,这也是Apple官方推荐的做法。
2025-07-09 11:03:22
616
原创 Swift 中的COW(写时复制)
Swift中的COW(写时复制)是一种优化值类型内存使用的技术。当多个变量共享同一数据时,COW会延迟复制操作,直到某个变量尝试修改数据时才创建独立副本。这一机制避免了大型数据结构(如数组、字典)的不必要复制,提升性能。开发者可通过引用计数检查实现自定义COW类型,但需注意COW仅在修改时触发。Swift标准库中的Array、String等类型已内置COW优化,在保证值类型语义安全的同时实现高效内存管理。
2025-07-09 10:34:57
519
原创 Swift - 方法派发机制
Swift的方法派发机制主要包括静态派发、动态派发和协议派发。静态派发在编译时确定方法实现,适用于值类型、final类和全局函数,性能最高。动态派发分为虚表派发(类的默认方式)和消息转发(通过@objc/dynamic标记实现),支持继承重写和与Objective-C交互。协议派发使用协议见证表处理协议方法调用。此外,扩展方法和泛型方法遵循特殊派发规则。合理选择派发方式有助于提升代码性能和灵活性。
2025-07-09 10:11:32
843
原创 Swift与OC相比有什么优势?
1. 性能碾压:静态派发+值类型使算法快2.6倍(苹果实测),对象创建提速1.8倍2. 革命性安全:编译时空安全(?拦截nil崩溃,Objective-C主要错误源)边界检查防缓冲区溢出3. 开发效率飞跃:精简50%+样板代码(去分号/方括号)Playground实时调试+原生async/await并发4. 未来生态:苹果新框架(SwiftUI/ARKit)独占支持跨平台扩展(服务端/Android/WebAssembly)
2025-07-09 10:06:25
584
原创 十、高级概念
Flutter核心概念摘要 Isolate:Dart的并发模型,独立内存空间,适用于CPU密集型任务,通过消息传递通信。与共享内存的Future相比,Isolate能实现真正并行。 Stream:StreamController管理数据流发射,StreamBuilder响应式构建UI,自动处理订阅状态,适合实时数据更新场景。 Key机制:标识Widget身份,控制复用逻辑。包含ValueKey(值比较)、GlobalKey(全局访问)等类型,对列表项和状态保持至关重要。 渲染流程:四阶段管线(构建→挂载→布
2025-07-04 16:43:26
868
原创 九、平台相关
本文介绍了Flutter与原生平台交互的几种方式。主要内容包括:1)通过Platform Channel调用原生代码,在Flutter和Android/iOS端分别创建MethodChannel实现双向通信;2)Platform Channel的三种类型(MethodChannel、EventChannel、BasicMessageChannel)及其通信原理;3)使用MethodChannel进行双向数据传递和EventChannel实现单向数据流;4)通过PlatformView嵌入原生视图的方法及注意
2025-07-04 16:35:49
722
原创 八、测试与调试
Flutter测试主要包括单元测试、Widget测试和集成测试三种类型,分别针对不同粒度的代码验证。单元测试使用test包快速验证独立函数,Widget测试通过flutter_test包检验UI组件交互,集成测试用integration_test包测试完整应用流程。此外,Golden测试通过截图对比确保UI一致性,DevTools提供性能分析、内存检测等调试功能。测试时可以使用mockito模拟依赖,WidgetTester模拟用户操作,并利用DevTools诊断性能问题。合理的测试策略应结合多种测试类型,
2025-07-04 16:28:05
822
原创 七、性能优化
本文总结了Flutter应用性能优化的关键策略:1) 使用DevTools、Inspector等工具检测UI渲染、内存问题;2) 通过重绘边界隔离刷新区域;3) 避免组件重建,推荐const构造函数和状态拆分;4) 长列表优化采用ListView.builder和固定高度;5) 减少启动时间需简化初始化、预加载资源。优化后首帧渲染时间可从1200ms降至400ms,显著提升用户体验。核心在于合理控制重建范围、减少不必要的计算和资源加载。
2025-07-04 16:15:14
768
OKR的基本介绍
2018-10-21
(vue.js)nuxt.js:IP端口/局域网配置
2018-11-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人