排序
Combine:订阅、绑定和内存管理
我正在参加「掘金·启航计划」 sink sink负责订阅Publisher,并返回一个AnyCancellabel。 完整签名: public func sink(receiveCompletion: @escaping ((Subscribers.Completion<Self.Fail...
SwiftUI:如何使用多个 Sheet
当我们在工作中,总会遇到弹出多个Sheet的情况。弹出一两个的情况下,我们可以使用绑定Boolean变量来完成。但是如果有很多种情况,会弹出很多种不同的Sheet我们该如何了来做呢?这就是我们今天...
SwiftUI:做一个好看的评分控件
mask在SwiftUI中是用于遮罩控件的,它可以根据我们提供的形状或者图片来裁剪控件的可见区域。比如,我们可以用圆形的mask来让一个图片控件变成圆形,或者用三角形mask一个按钮,只展示按钮的一个角...
所有开发者注意,苹果审核策略有变
这里每天分享一个 iOS 的新知识,快来关注我吧 访问敏感数据的 App 新规 苹果最近在 Apple Developer 上发了篇新闻公告,对需要访问用户敏感数据的 App 增加了审核要求。 这件事的缘由是苹果发...
Swift 周报 第三十五期
前言 本期是 Swift 编辑组整理周报的第三十五期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。 欢迎投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周...
如何避免过早加载控制器 view
前言 最近做了一波性能优化,发现项目中有一部分控制器的 view 在没有展示给用户之前就已经加载到内存中了,这其实是一种浪费,而且不符合懒加载的原则。 那什么情况会导致控制器的 view 过早加...
Swift 5.9 新特性—C++互操作性
介绍 Swift 5.9 之前 Swift 与 C++ 互操作需要借助于 Objective-C,即 Swift ↔ Objective-C ↔ C++。 Swift 5.9 之后 Swift 与 C++ 的类型与函数有了可以直接交互的能力。 重要配置:Build Set...
GeometryReader in SwiftUI
GeometryReader 可以获取父视图的大小信息,用来适配不同尺寸的容器 再开始今天的主角前,我们先看一个使用普通手段布局的例子。 我们用两个视图来平分整个页面。 HStack(spacing: 0) { Rectangl...
如何使用 SwiftUI 中新地图框架 MapKit
前言 了解 iOS 17 中的 MapKit 后,我们会发现 Apple 引入了更适合 SwiftUI 的 API。 MapKit 弃用项 一旦将你的 App 目标更新到 iOS 17,Xcode 会将任何使用旧的 Map 初始化器的用法标记为已弃...
一探究竟:iOS 开发中的内联函数优化技术
前言 在iOS应用开发中,优化程序性能是一个非常重要的问题。内联函数(Inline Function)技术是一种常用的优化技术之一,可以将函数调用操作在编译期间替换为函数实现的代码,从而避免了函数调...
SwiftUI魔法:通过DragGesture互动提升用户体验
本教程会用 DragGesture 再打造一个我们经常在 app 中见到的交互动画效果,这个效果很有利于提升用户交互体验,相信你在很多 app 中见过这个交互,我们来一起看看具体实现吧 本章节的例子是一个...
DragGesture in SwiftUI
GragGesture在项目中是经常用到的,尤其是在做一个些炫酷的动画中,比如一些流行的社交软件,例如:国内的探探,国外的Tinder, 首页都有类似左滑右滑的动效。这些都和Grag手势有关系。下面我们...
Swift 中的 async/await ——代码实例详解
前言 async-await 是在 WWDC 2021 期间的 Swift 5.5 中的结构化并发变化的一部分。Swift 中的并发性意味着允许多段代码同时运行。这是一个非常简化的描述,但它应该让你知道 Swift 中的并发性对...
Swift 属性包装器 @propertyWrapper
Swift PropertyWrapper 官方教程:《Property Wrappers》 属性包装器在管理属性存储方式的代码和定义属性的代码之间添加了一层分离。例如,如果您有提供线程安全检查或将其基础数据存储在数据库...
实战教程·元宇宙来了,准备好你的电子名片了吗?(一)
需求背景 自从在技术论坛开始写作后,会遇到来自不同领域不同平台的朋友加为好友。后来人数多了以后,对于相同社区的朋友为了方便管理就建立了微信群进行管理。由于在不同平台的内容更新频次不...
Swift Combine 框架学习系列二:错误处理
上一篇讲解了 Combine 中的两大概念:Publisher 和 Subscriber 以及其基本使用。这一篇主要讲解一下,当 Combine 流中发生错误,我们应该怎么处理。 错误主要是分为两大类,一种是错误类型不匹...
Swift:通过Protocol封装统和入参
本文正在参加「金石计划 . 瓜分6万现金大奖」 前言 本篇技术含量不高,更多的侧重从业务层面思考Protocol的封装。 接上回Swift:巧用module.modulemap,告别Bridging-Header.h,当我把友盟SDK集...
Swift中MVVM对于列表中Cell的拆分(上)
我正在参加「掘金·启航计划」 1. 现有的一些问题 我们开发中使用 MVVM模式,在viewModel 中进行输入输出的处理,在controller中进行绑定处理,类似我之前的文章RxSwift学习-24-RxSwift中MVVM的...
SwiftUI 项目实战·专栏开篇词
前言 我,一名专职B端产品经理,断断续续学习SwiftUI编程2年有余。陆续已经完成《SwiftUI极简教程》专栏共计42篇文章、《Swift实用小册》专栏共计26篇文章,另外《SwiftUI 100days》专栏共计37...
炎炎夏日教你利用小米智能家居配件+树莓派4接入Apple HomeKit
我正在参加「创意开发 投稿大赛」详情请看:掘金创意开发大赛来了! 前言 Apple HomeKit智能家居方案,是苹果2016年在WWDC大会上提出来的,至今已经6个年头。在国内一直是不温不火的状态,除了...