前面我们用过Just,其数据的发布和订阅是同步行为。如果希望数据的发布和订阅是异步的,可以使用Future。Future可以创建一个接收未来数据与事件的 Publisher。Future定义如下:
DispatchQueue Swift 中,对 GCD 语法进行了彻底改写。引入了 DispatchQueue 这个类。 先来看看在一个异步队列中读取数据, 然后再返回主线程更新 UI, 这种操作在新的 Swift 语法中是这样的: DispatchQueue.global().async { DispatchQueue.main.async { // 更新UI操作 } } DispatchQueue.global().async 相当于使用全局队列进行异步操作。然
Swift 中,对 GCD 语法进行了彻底改写。引入了 DispatchQueue 这个类。
从ios8开始苹果引入了一个新的概念 QoS(quality of service),有了更贴近使用场景的描述以及更细致的划分,代码如下 OC
前言: 1、在Mac OS中NSWindow的父类是NSResponder,而在iOS中UIWindow的父类是UIView。程序一般只有一个窗口但是会又很多视图。 2、UIView的作用:描画和动画,视图负责对其所属的矩形区域描画、布局和子视图管理、事件处理、可以接收触摸事件、事件信息的载体等等。 我在前面详细介绍了setNeedsDisplay , setNeedsLayout和layoutIfNeeded 详情请点击。 下面介绍的是view添加以及删除时所触发的方法 // 当视图添加子视图
iOS17适配指南之UIContentUnavailableView(一)主要讲解了 UIContentUnavailableView 的基本使用与 UIContentUnavailableConfiguration 的两种配置empty()、loading()。本文将介绍另外一种配置search()以及如何使用 SwiftUI 自定义配置。
效果如图: 代码如下: // // ViewController.swift // TwoSidedView // // Created by mayl on 2017/12/14. // C
当需要实现类似“轮询”这种操作的时候,我们可能会希望有一个“被放缓了的” for 循环 —— 即当某次操作执行后,稍等一下再去执行下一次操作。这时有几种方法可以供我们使用,来实现这种效果,下面对比总结一下。
最早看到这个电子木鱼是在抖音刀叔的视频中,最近貌似在圈内火了,恰逢课上在讲多媒体编程,简单实现一个。
其实这个标题不知道怎么写了,都很碎,也没有想到特别合适的例子能够全部放在一起的。索性就这么平铺开吧。 image.png 1. dispatch_once,以及Swift下的单例 使用dispatch
本文同步 个人博客 简书 掘金 慕课 使用Xcode 9.3 Swift4.1
在 SwiftUI 中,我们可以通过添加不同的交互来使我们的应用程序更具交互性,这些交互可以响应我们的点击,点击和滑动。
笔者在App登录后,切换RootViewController时,发现window上盖着一层看不见的View。如图所示:
首先进入的是启动的界面,我们已经在上一篇做好了。第一次启动之后会出现一个宣传的视频,是下面的界面。
保证应用不因 Core Data 的原因导致意外崩溃是对开发者的起码要求。本文将介绍可能在视图中产生严重错误的原因,如何避免,以及在保证视图对数据变化实时响应的前提下如何为使用者提供更好、更准确的信息。由于本文会涉及大量前文中介绍的技巧和方法,因此最好一并阅读。
添加代理 UITableViewDelegate,UITableViewDataSource
在 Swift 语言推出的同一年(2014 年),苹果就在 Xcode 中集成了 Playground 功能。相较标准的 Xcode 项目,Playground 启动更快、使用更轻巧,被广泛应用于 Swift 语言学习、框架 API 测试、快捷数据处理、汇集灵感等众多方面。本系列将介绍大量有关 Xcode Playground 的使用技巧,涉及稳定性、第三方库、资源管理、异步处理、文档标注等等方面,让你玩转 Playground,使其成为你工作学习中的利器。
GCD属于系统及的线程管理,功能很强大,比上两次咱们分享的Operation要强大。有很多老前辈们已经创造了非常非常多的资料介绍GCD,因为大家都是把GCD放在了多线程内容分享的最开始,所以导致好多好多理论知识都被放在了GCD部分。 哈哈~幸好非典型技术宅英明神武的错峰出行,把一些基础概念放在了上两篇文章里面。极大的减轻了这篇文章的阅读负担。 既然前人都早了辣么多轮子,俺就不想再多介绍一些基础理论知识了。反正码再多的字,只会让大家立刻马上关掉这篇文章。而且上一篇关于Operation的阅读量就明显不高,看来
前言:上章UIKit Dynamics 置身真实世界介绍了基本用法,下面我们继续深入学习——手势跟Dynamics结合的用法 一、触摸处理 1、在ViewController.swift添加以下属性,并在Main.storyboard结合这些属性,在Main.storyboard添加一个imageView,以及扮演redSquare,blueSquare的俩个view @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var
同步执行:程序会等待直到方法执行完成后,才会执行后面的程序 异步执行:程序不会等待方法执行完毕,它会立即执行
GCD编程的核心就是dispatch队列,block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用。所以说,结合block实现的GCD,把函数闭包(Closure)的特性发挥得淋漓尽致
不论线程通过如何调度或线程如何交替执行,在不需要做任何干涉的情况下,其执行结果保持一致符合预期,则称之为线程安全。
当你在工作中需要开发一个新的应用程序时,首先你会去考虑使用哪种设计模式,是 MVC 呢还是 MVVM?当然这话放在今儿个说,大家肯定会一致的选择 MVVM,因为相比 MVC 模式,MVVM 模式有太多的优势,譬如说移除了在 View Controller 中的业务逻辑,将这部分代码放在 View Model 中执行,职责分工明确等等。
在AlamofireImage中一共就只有5个类加一些扩展 // 错误处理类,继承自Error,主要有requestCancelled(请求取消)、imageSerializationFailed(请求失败)两种错误 AFIError // 定义图片对象,主要用来适配mac(NSImage)和ios(UIImage)平台 Image // 图片内存缓存对象 ImageCache // 图片下载对象(下载基于Alamofire) ImageDownloader // 图片滤镜对象(CoreGraphics切圆
本文将通过一段可复现的“灵异代码”,对 State 注入优化机制、模态视图( Sheet、FullScreenCover )内容的生成时机以及不同上下文( 相互独立的视图树 )之间的数据协调等问题进行探讨。
翻译自raywenderlich网站iOS教程Graphics & Animation系列
本文不涉及 GCD 的概念和理论,仅记录了 GCD 在一些开发场景下的应用。嗯,欢迎大家积极留言补充。
判断一个可滚动控件( ScrollView、List )是否处于滚动状态在某些场景下具有重要的作用。比如在 SwipeCell[3] 中,需要在可滚动组件开始滚动时,自动关闭已经打开的侧滑菜单。遗憾的是,SwiftUI 并没有提供这方面的 API 。本文将介绍几种在 SwiftUI 中获取当前滚动状态的方法,每种方法都有各自的优势和局限性。
先添加需要的代码,这里需要将storyboard的ViewController换成
上一章节主要从整体上全览AVFoundation框架,本章主要以一个小的需求(以媒体捕捉以起点,拍摄、保存视频),打开AVFoundation的大门,带领我们欣赏这个框架带来的强大功能。
总结下 swift下的基础语法,里面涉及到:常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift有所帮助,同时也是对自己的一个总结。
在主工程里创建附属小组件:Xcode -> File -> New -> Target -> iOS -> Widget Extension:
Swift-MVVM 简单演练(二) Swift-MVVM 简单演练(三) Swift-MVVM 简单演练(四) 前言 最近在学习swift和MVVM架构模式,目的只是将自己的学习笔记记录下来,方便自己日后查找,仅此而已!!! 本来打算一篇全部搞定的,但是简书每篇文章只能写大约不超过15000字的内容,因此只能分开写了。 如果有任何问题,欢迎和我一起讨论。当然如果有什么存在的问题,欢迎批评指正,我会积极改造的! ---- 这篇文章都写啥 自定义NavgationBar 抽取便利构造函数 初步的下拉刷新/上
随着苹果对 iPadOS 的不断投入,越来越多的开发者都希望自己的应用能够在 iPad 中有更好的表现。尤其当用户开启了台前调度( Stage Manager )功能后,应用对不同视觉大小模式的兼容能力就越发显得重要。本文将就如何创建可自适应不同尺寸模式的程序化导航方案这一内容进行探讨。
Swift-MVVM 简单演练(一) Swift-MVVM 简单演练(二) Swift-MVVM 简单演练(四) 优化一些小细节 设置SVProgressHUD最小提示时间 在我们用SVProgressHUD的时候,它默认的显示时长可能会不符合你的使用规则。我们可以更改它显示的最小时间(setMinimumDismissTimeInterval) 像这种全局都能用到的东西,我们最好是设置在一个方便管理的地方,这里以在AppDelegate中设置 extension AppDelegate {
相信大家平时在用 App 的时候, 往往有过这样的体验,那就是加载网络数据等待的时间过于漫长,滚动浏览时伴随着卡顿,甚至在没有网络的情况下,整个应用处于不可用状态。那么我们该怎么去提高用户体验,保证用
SE-0296提案终于为开发者带来了期待已久的 async/await,语法基本上和javascript中的很像。
Safe Area(安全区域)是指不与导航栏、标签栏、工具栏或其他视图控制器提供的视图重叠的内容空间。
本期是 Swift 编辑组自主整理周报的第二十四期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。
Xcode8正式发布后,Swift3也随即发布,为了跟上苹果这艘大船的脚步,赶紧逼着自己看文档哦。在看文档的过程中,发现GCD的变化跟OC相比简直都要不认识了,赶紧写个文章总结下,顺手复习下GCD中死锁的概念,死锁的总结发布在另一篇文章里了。
现在已经拥有了自己的项目,并且因为不喜欢使用故事板,所以应用程序以编程方式完成,这意味着没有按钮或开关切换,只需要纯粹的代码。
有并发的地方就存在线程安全问题,尤其是对于 Swift 这种还没有内置并发支持的语言来说线程安全问题更为突出。下面我们通过常见的数组操作来分析其中存在的线程问题,以及如何实现一个线程安全数组。 问题所
今天给大家带来多线程系列的第二篇文章 -- GCD,其大概率是我们在使用多线程时最常用的方式了。
1 var label = UILabel() 2 override func viewDidLoad() { 3 super.viewDidLoad() 4 // Do any additional setup after loading the view, typically from a nib. 5 6 label.frame = CGRect(x:0, y:0, width:320, height: 7 label.text = “Loading……” 8 label.font
FaceID和TouchID本身代码很简单,使用起来也很容易,主要是逻辑的嵌套相对复杂。 状态很多但不是所有状态都需要处理和提示,故没有列出所有枚举
Combine 既可以在 SwiftUI 中使用,也可以在 UIKit 中使用。下面分别实践一下。
EventKit掌管着日历事件和提醒事件两个App的信息 调用相关代码,需要在plist文件里添加item,如下图: 📷 都通过EKEventStore进行访问 private var store: EKEventStore = EKEventStore() // 初始化和释放时间比较长,建议写成单例 一、日历事件的:增删改查 1、检查授权 // 1.检查授权 store.requestAccess(to: .event) { (granted, error) in if granted { // 已授
线程锁是什么 在前面的文章中总结过多线程,总结了多线程之后,线程锁也是必须要好好总结的东西,这篇文章构思的时候可能写的东西得许多,只能挤时间一点点的慢慢的总结了,知道了线程之后要了解线程锁就得先了解一下什么是“线程锁”。 “线程锁”一段代码在同一个时间内是只能被一个线程访问,为了避免在同一时间内有多个线程访问同一段代码就有了“锁”的概念,比如说,线程A在访问着一段代码,进入这段代码之后我们加了一个“锁”。这个时候线程B又来访问了,由于有了锁线程B就会等待线程A访问结束之后解开了“锁”
领取专属 10元无门槛券
手把手带您无忧上云