Tag: Rxswift

如何从RxSwift开始-逐步

在这个简短的教程中,我们将创建一个简单的应用程序,该应用程序将使用Coin Market API来获取所有加密货币的最新报价。 这次的不同之处在于,最重要的部分将使用RxSwift和反应式编程来实现。 完成后,该应用程序将如下所示: 没什么特别的,但true内藏着真正的美。 您可以使用以下链接下载入门项目: 入门项目 如果您在工作中陷入困境,只需看一看托管在我的GitHub帐户上的已完成项目。 的GitHub 为了方便起见,我已经安装了所有依赖项,但是您应该打开podfile来检查将使用的内容: pod’RxSwift’,’〜> 4.0′ pod’RxCocoa’,’〜> 4.0′ pod’SwiftyJSON’ 我想我不需要告诉您有关RxSwift库😆的信息。 我们将使用SwiftyJSON解析服务器对代表应用程序中模型层的对象的响应。 您无需为此烦恼,因为我们只会在一个地方使用它。 对于第二个依赖项,需要简短说明。 RxCocoa基于RxSwift并包含大量有用的API,它们为Apple库中使用的最受欢迎的工具(例如URLSession或UITableView)添加了“反应性”扩展 。 RxCocoa应该自己撰写整篇文章(可能不止一篇),但是这次我们仅使用它来扩展URLSession对象功能。 您可以使用CoinsCap_RxSwift.xcworkspace文件打开您的项目。 编译并在模拟器或物理设备上运行它,以检查是否一切正常。 现在,您的眼睛应该看到类似以下的内容: 目前没有什么特别的事情发生,但是我们会在短时间内对此进行处理。 现在,看一下项目结构。 最重要的文件位于CoinCap文件夹中。 您可以在其中找到两个UIViewControllers对象和代表我们的数据模型的Struct。 现在,我们将处理应用程序中最重要的部分-从远程服务器获取数据。 打开MainViewVC.swift文件。 我们将在getCurrentCoinsCap(fromUrl 🙂函数中编写用于获取加密货币数据的代码。 对于此任务,我们将使用URLSession,因此有关此API的基本知识将非常受欢迎。 但是我们不会使用默认实现。 这次,我们将使用RxCocoa库提供的自定义反应式扩展。 这将使我们编写反应式代码。 稍后您会明白我的意思。 getCurrentCoinsCap(fromUrl :)函数仅采用字符串类型的一个参数,该参数将用于创建硬币市场URL。 首先在函数内添加以下代码: 让响应= Observable.just(url) 您将创建一个Observable对象,该对象仅包含一个元素(因此将其命名为“ just”),该对象将在创建订阅时发出。 这是创建完整URL的起点。 使用作为RxSwift一部分的map函数,我们将创建一个适当的URL对象。 在getCurrentCoinsCap(fromUrl :)函数的末尾添加以下代码: .map {url-> URL in return […]

带有RxSwift的MVVM:用户登录

您是否厌倦了使用相同的旧MVC架构模式来开发iOS应用程序,并且足够开放以尝试新的模式,所以嘿! 你是在正确的地方。 注意 :如果您不知道RxSwift是什么,那么我建议您通读我以前的文章,它将带您了解RxSwift的一些非常基础的知识,以便您对我在本文中要解释的代码感到满意。 RxSwift:观察运算符✅ 如果您来自编程背景或具有某种专业知识,那么您一定一定会遇到…… medium.com 现在,我假设您对RxSwift的功能以及如何使用它有一些基本的了解。 因此,现在继续前进,在深入研究一些编码之前,请先讨论MVVM(模型-视图-ViewModel)体系结构。 MVVM与MVC非常相似。 它描绘了视图和控制器的紧密耦合本质,并引入了一个新组件。 在MVVM下,View和ViewController彼此紧密相连,我们将它们视为一体。 视图仍然没有直接引用模型,控制器也没有。 相反,他们引用了新组件ViewModel 。 ViewModel 是放置您所有用于用户输入的验证逻辑,用于视图的呈现逻辑,任何网络请求的发起以及其他各种代码的绝佳场所。 不属于ViewModel的一件事是对视图本身的任何直接引用。 ViewModel中的逻辑在iOS上应与在OS X上一样适用。(换句话说,不要在视图模型中#import UIKit.h,就可以了。) 由于表示逻辑(如将模型值映射到格式化的字符串)属于ViewModel,因此ViewController本身变得far肿得多,代码行数少了。 最好的部分是,当您开始使用MVVM时,您只能在ViewModel中放置少量代码逻辑,当您对范式更加满意时,可以将更多的代码逻辑迁移到它们上。 使用MVVM编写的iOS应用程序具有很高的可测试性。 由于视图模型包含所有表示逻辑并且不引用视图,因此可以通过编程对其进行全面测试。 从理论上讲,现在是时候让我们掌握一些代码示例了,这将使您快速了解如何有效实施MVVM。 LoginModel是一个存储登录凭据(即用户名和密码)的类。 LoginViewModel: 这是主要的ViewModel,它实际上处理Login视图上的所有用户交互。 在这里,我们创建了密码和电子邮件视图模型的实例,还定义了可观察对象,即将 变量绑定为 isSuccess,isLoading,errorMsg ,并将其绑定到视图以进行响应数据更改。 在validateCrentials()函数中,我们实际上通过调用相应的ViewModel函数来比较字段值。 最后, loginUser()使用值初始化模型,然后创建对包含电子邮件,密码的api的请求,最后启动API请求。 无论是成功还是失败响应,我们都会更新我们之前在案例中定义的可观察对象isLoading,isSuccess,errorMessage ,它们使用绑定立即反映在视图中,从而使其具有反应性。 现在,最后我们进入视图,即ViewController,其中ViewModel以反应方式反映数据。 在createViewModelBinding函数中,我们将电子邮件和密码字段与各自的ViewModel的数据变量绑定在一起,简而言之,将文本字段的文本和数据变量值保持同步。 因此,当电子邮件文本字段的值更改时,数据变量值也会更改。 登录按钮的点击监听器首先通过self.emailTextField.resignFirstResponder()关闭键盘,然后验证凭据并相应地调用loginUser函数进行处理。 在createCallbacks函数中,我们订阅了isSuccess和errorMsg可观察的对象,因此,如果其值发生任何更改,我们都将在View中进行回调,并可以执行该过程。 到此为止,希望您能从中学到一些有用的东西。 因此,如果您有任何想法和意见,请随时在下面发表评论。 别忘了通过多次鼓掌来分享您的爱。 您可以在 Twitter,Github,LinkedIn,Facebook 上关注我 。 快乐编码👨‍💻。

RxSwift主题

将新值添加到可观察值? 向主题问好。 开发应用程序时,通常需要在运行时将新值手动添加到可观察对象上,并将其发送给订阅者。 我们想要的是既可以观察又可以充当观察者的东西。 这称为主题 。 主体既充当可观察者又充当观察者。 他们可以接收.next事件,并且每次接收到事件时,它都会转身并将其发送给其订户。 RxSwift中有四种主题类型 PublishSubject :开始为空,仅向订阅者发出新元素。 BehaviorSubject :从初始值开始,然后将其或最新元素重放给新订户。 ReplaySubject :使用缓冲区大小初始化,并将保留最大大小的元素的缓冲区并重播给新订户。 BehaviorRelay :包装BehaviorSubject,将其当前值保留为状态,并仅向新订阅者重播最新/初始值。 发布主题 让我们创建一个PublishSubject,在上面添加一些订阅者,并在运行时添加一些值。 请记住,PublishSubject会向订阅者发出新的元素,因此,为了使订阅者获取值,订阅之后必须发生.onNext事件。 输出: 第一:下一个(1) 第一:下一个(2) 第一:下一个(3) 第二:下一个(3) 第一:下一个(4) 第二:下一个(4) 第二:下一个(5) 第三名:下一个(5) 有道理吧? 订阅者等待.onNext事件以获取值。 订阅后,订阅者将从PublishSubject接收值,直到订阅被释放。 行为主体 使用与以前相同的代码,只是主题类型有所不同。 输出: 第一:下一个(初始值) 第一:下一个(1) 第一:下一个(2) 第二个:next(2) 第一:下一个(3) 第二:下一个(3) 第一:下一个(4) secord:下一个(4) 第三名:下一个(4) secord:下一个(5) 第三名:下一个(5) 如您所见,输出的主要区别在于,发生订阅时,订阅者会立即打印该值。 记得? BehaviorSubject从初始值开始,然后将其或最新元素重放给新订阅者。 重播主题 输出: 第一:下一个(1) 第一:下一个(2) 第二个:next(1) 第二个:next(2) […]

RxSwift研究组-第1部分可观察到的

这是RxSwift学习会系列文章第一篇,文章编排与架构方式可以参考前言。 关于RxSwift 首先,RxSwift可以说是Swift中的响应式编程 。Swift就是一个程序语言,响应式编程是从哪里来的呢? Microsoft有一个团队,他们为了解决异步造成的程序代码混乱,难以规范化,以及开发App遇见见的困难,他们决定开发一个库来解决这些问题。 2009年这个团队推出了一个客户端和服务器端框架,称为.NET(Rx)的反应性扩展 ,就是后来有人常讲的Rx库。 很快的这个框架就从外挂(.NET 3.5)变成内建核心库(.NET 4.0)。他们在2012年将这个框架开源,让不同的程序语言也可以做出自己的Rx库—这让Rx变成跨平台的标准。 因为Rx生态圈蓬勃发展,今时今日我们有许多不同语言都有Rx Library,实作一样的行为跟提供一样的API ,这让使用Rx的开发者,可以跟不同程序语言的开发者(例如,使用RxJS写web的人)讨论逻辑 。 举例来说,Rx文档中清楚定义了许多operator的名称与功能,其中一个叫做merge,而不同语言的Rx Library有实作这个merge operator。讨论某个资料处理的逻辑时,说出“把a跟b merge起来然后怎样怎样…”这种句子时,两个人都可以充分理解彼此在说什么😎。 因此可见,反应性编程其实已经存在很久了,不是一个新的东西,但它的核心概念让它在最近十年又开始备受瞩目。据Raywenderlich推出的这本书,RxSwift的定义为: RxSwift是一个库,用于通过使用可观察的序列和功能样式运算符来组合基于异步和事件的代码,从而允许通过调度程序进行参数化执行。 但我们可以抓出几个关键字 目标:基于事件的异步代码 方法:可观察的序列,函数样式运算符,用于参数化执行的调度程序 简单来说,Rx的核心概念就是使用Observable Sequence + Functional Style Operator + Scheduler,把原本的代码变成基于事件的代码,解决异步造成的混乱。 问题一:异步造成了什么混乱? 在原本的设计中,ViewController同时要处理来自不同东西的异步事件。事件源包含委托,数据源,通知中心,GCD,关闭…等。无法有统一的管理方式,你经常会不晓得其中一个异步事件会先被触发。 问题二:Rx如何处理? 可观察序列可以将异步的结果变成一个事件。当我们需要处理异步时,只需要依据这个事件。 将来自不同地方的异步结果,用一致的概念包装起来,独立,逻辑清晰集中,跨平台都可以理解。这就是处理异步时最理想的状态,而不需要使用一大堆观察者模式像是KVO,通知,关闭,委托…等等,另外容易搞清楚先后顺序,在跨平台理解上门生物学也比较高。 如何把异步变成可观察序列呢? 以UI元素来说 系统状态 举例说明: 从API捞回最新的商品资料,依据价格高低排序后,从台币转换成美金,四舍五入取小数点后两位,更新UI。 一般写法 code顺序混乱,权责不清楚,在API中处理资料转换 可观察序列+函数样式运算符+调度程序改写 先改写APIManager 再改写ViewController 顺序,逻辑,分工清楚 可以抛光来,我们的逻辑变得一致且集中了!

RxSwift中的TableView –第2部分

如果您还没有阅读上一部分,可以在这里获得。 在上一个中,我们讨论了如何设置具有一个部分和单元格类型的TableView。 在本文中,我们将讨论如何设置具有单元格类型的多节的TableView。 为什么我要为多节类型撰写另一篇文章? 我们看到了使用一个节和一个单元格处理TableView的过程很简单,但是如果我们要使用单元格类型来处理多个节,则应该安装RxDataSources并在此库的帮助下管理TableView。 因此,我决定另写一篇文章,介绍如何使用RxDataSources处理TableView。 在这一部分中,我们将设置具有多个节和单元格类型的TableView。 像上一部分一样,我在这里在Github上创建了一个简单的项目。 我在该项目中使用了MVVM设计模式。 安装吊舱 像以前一样,我们有RxSwift和RxCocoa,但是还应该添加一个Pod。 这是RxDataSources。 像以前一样,我们有三个独立的层。 模型 我们为两种不同的细胞类型创建两种不同的模型。 第一个模型是具有两个属性的学生。 您可以在下面看到TableViewSection和TableViewItem。 我们迅速使用Enum的功能并创建这两种类型。 像上一篇文章一样,我们创建了SectionOfStudent类型的发布主题。 就像我之前说过的,我们需要两个参数用于RxDataSources的SectionModel。 其中之一是TableViewItem,因此我们将创建项目并将其附加到TableViewItem数组中。 之后,我们创建SectionOfStudent (SectionModel的类型别名)对象,并为itemType传递item和main(TableViewSection代表section类型)项。 SectionOfStudent(model:.main,项目:subItems) 最后,我们将SectionOfStudent放入数组中,然后调用发布主题的onNext() 。 我们将SectionOfStudent放在数组中的原因是我们可能希望拥有更多的Sections类型。 请参见下面的代码: 感谢您阅读本文,如果喜欢,请与他人分享😊。 我正在等待在评论部分中看到您的评论或推荐。

Swift的反应式编程第1部分

如果您是iOS开发人员,那么您应该已经听说过RxSwift。 这是Reactive编程的快速版本。 RxSwift功能强大且有效,它将为您完成代码中的所有工作,并使您的开发人员生活变得轻松。 不相信吗? 比起您,我可以检查一下此介绍性的Reactive Programming,与我me —> 新手的Reactive编程 。 RxSwift漫游以下条款: –观察员与观察员 – 学科 –运营商 –调度程序 让我们开始一个个地探索所有这些东西。 可观察者和观察者: “事件A发出一些数据,订阅事件A的其他事件(例如事件B和事件C)将获得该发出的数据。 发出数据的事件(在这种情况下为Event-A)被称为“ 可观察的 ”或“ 可观察的序列 ”,并且接收到发出的数据的所有事件(在这种情况下为Event-B和Event-C)被称为“ 观察者 ”。 这是理解Observable的最简单定义。 可观察的数据可以是连续的,也可以在多个实例中发出。 观察者可以依次接收所有这些实例。 让我们检查下图: 这是上图快速显示编码的方式: let observableA = Observable.of(1,2,3,4,5,6)//创建可观察的 让observerB = myFirstObservable.asObservable() //订阅Observable readerB.subscribe {事件在 打印(事件) } 输出: 下一个(1) 下一个(2) 下一个(3) 下一个(4) 下一个(5) 下一个(6) 已完成 在这里,观察者B不断获取来自A的数据。相同的基础也将适用于其他观察者(C和D)。 您可能会对上面的输出中的“下一个”和“已完成”这两个术语感到好奇。 让我们检查一下。 可观察的生命周期: 可观测值包括三个主要事件: […]

在几分钟内通过RxSwift将MVC iOS应用重构为MVVM

MVC是Apple在开发iOS应用程序时向开发人员推荐的应用程序体系结构。 它提供了视图,模型和控制器之间的清晰分隔。 控制器位于中间,充当视图和模型之间的粘合剂。 从模型到视图的几乎所有逻辑数据转换都被扔到控制器内部。 随着功能和需求的增长,视图控制器在逻辑,状态管理,数据转换等所有方面变得非常庞大,它将紧密耦合在一起,并且很难作为一个整体进行测试。 尽管并非总是如此,但是如果我们认真地正确管理它。 有关更好的MVC,请参见Dave De Long博客文章。 更好的MVC,第2部分:修复封装 关于“修复”模型视图控制器的系列文章的第2部分:更好的MVC,第1部分:问题,更好的MVC,第2部分:修复… davedelong.com MVVM简介 模型视图视图模型是一种应用程序体系结构,最初由Microsoft于2005年通过其.NET框架首次发明,以构建事件驱动的用户界面。 MVVM作为一种体系结构提供了许多主要职责,例如: 作为提供应用程序状态表示形式的接口。 作为从模型显示的数据转换的管道,将显示到视图中。 使用MVVM,所有从模型进行的数据转换(例如,格式化日期要在UILabel显示为文本)将由视图模型实现,并作为属性公开给控制器。 View Controller的职责是配置属性,将视图模型中的属性绑定到视图中,并将所有操作从视图发送回视图模型。 这样,应用程序状态将始终在视图和视图模型之间保持同步。 有几个重要的规则适用: 模型归视图模型所有,并且对视图模型一无所知。 View Model由View Controller拥有,它对Controller一无所知 控制器拥有视图模型,并且对该模型一无所知。 MVVM提供了更好的业务逻辑封装和来自模型的数据转换,并且作为一个单元进行测试也非常容易。 并非所有的View Model都需要提供对其属性的绑定,它仍然可以是一个轻量级的对象,可以用来通过数据转换配置视图,正如我们稍后在构建应用程序时所看到的。 有几个绑定选项可用,例如使用键值观察和闭包。 在本文中,我们将使用RxSwift库提供可观察到的反应性序列来构建我们的MVVM应用程序。 我们将建立什么 在本文中,我们将把使用MVC作为其应用程序体系结构的当前iOS应用程序重构为MVVM。 这是一个电影信息应用程序,它使用具有以下主要功能的电影数据库(TMDb)API: 按最新趋势,最受欢迎和最近的时间获取电影列表。 使用搜索栏搜索电影。 我们将看到MVVM体系结构将如何帮助我们构建更轻便的视图控制器和一些各自负责的视图模型。 请注册并从TMDb获取您的API密钥。 https://www.themoviedb.org/documentation/api 您可以在下面的GitHub存储库中克隆入门项目: alfianlosari / MovieInfoStarterProject 电影信息MVVM启动项目。 通过在… github.com 上创建一个帐户为alfianlosari / MovieInfoStarterProject开发做出贡献 入门项目 入门项目使用情节提要来配置其视图控制器。 偷看Main.storyboard文件以查看配置。 该应用程序的初始视图控制器是一个带有两个子控件的Tab Bar控制器,每个子控件都嵌入到导航控制器中。 […]

Swift Talk:使用RxSwift的高级MVVM [第5集] UITableView绑定

在RxSwift的热身剧集中,我们介绍了使用RxSwift和RxCocoa的UITableView绑定,这将导致删除大量样板代码和从ViewModel到ViewController的委托。 反过来,这会使整体代码更简洁,更清晰。 你还在等什么? 使用RxSwift观看MVVM的最新一集。 观看其他TOP编程教程,网址为: 轻松编写代码 来自行业专家的真实经验的视频教程。 Laravel,AngularJS,iOS,Android,NodeJS… youtube.com 请关注我们: http://letscodeeasy.com www.facebook.com/letscodeeasy https://twitter.com/letscodeeasy

Rx中的反应式编程

首先,我当然建议您阅读官方文档。 在那里,您可以找到RxSwift运算符的基础知识。 本质上,在RxSwift中,所有事物都是围绕可观察对象构造的。 根据其名称,您可能会猜测我们将在整个程序中观察到此类对象的变化。 特别是,这些对象将通知您有关其状态的更改。 此外,我们拥有执行任何必要动作的能力,这些动作将改变返回的对象(过滤器,地图,flatMap等)。 因此,完整的工作流程如下所示:使用某些功能创建一个可观察对象。 例如,一个内部包含单个参数并返回可观察对象的对象。 此外,还有大量其他变体。 您可以在文档中检查它们。 使用不同的运算符(如果状态已更改)描述其行为。 例如,为了在特定条件下获取结果而进行过滤,或者设置一个线程来运行结果代码。 为每个状态(下一步,完成,错误)设置处理程序(如果需要)。 订阅-从现在开始通知观察者我们希望获得其通知。 此代码说明了订阅某些可观察对象的示例。 魔鬼并不像他画的那么黑,所以不要害怕。 该示例非常简单,因此我们将尝试逐步解释它。 您可以在文档中轻松找到所有未知方法。 首先,我们将创建一个OperationQueue。 这个阶段对您来说并不难。 现在,让我们深入探讨其他复杂的问题。 BackgroundWorkScheduler描述了用于从队列的后台执行操作的线程。 下一部分很有趣。 有些对象可以上传视频,我们将订阅其更改。 应该在后台线程上进行工作的设置,我们将在该线程上处理初始结果。 使用“ map”方法转换对象以使其成为字符串。 在主线程中开始工作,以进行UI工作 “设置”,处理下一个状态的功能。 实际上,我们在下面的几行中执行了所有这些操作。 让operationQueue = NSOperationQueue() operationQueue.maxConcurrentOperationCount = 3 operationQueue.qualityOfService = NSQualityOfService.UserInitiated 让backgroundWorkScheduler = OperationQueueScheduler(operationQueue:operationQueue) videoUpload .observeOn(backgroundWorkScheduler) .map({json in 返回json [“ videoUrl”]。stringValue }) .observeOn(MainScheduler.sharedInstance) .subscribeNext {网址 self.urlLabel.text =网址 […]

iOS中的反应式编程?

React Native!=反应式编程 หลายๆคนเห็นแล้วอาจจะสับสนเข้าใจผิดว่ามันคือตัวเดียวกันจริงๆมันแค่ชื่อคล้ายกันเฉยๆนะ React Native本地 JavaScript代码库本地Facebook社区2013本地库开发人员Applicationาสารถพัฒนา应用程序android和iOS平台ได้ด้วยการเขียน代码Codeยเพีรั้งเดียว! ApplicationรียแบบาการพัฒนาApplicationแบบHybridก็ได้องใช้ภาษาที่ผูกติดกับPlatformใดPlatformหนึ่งนนiOSก็จะใช้Swift / Objective-CงางAndroidจะใช้Kotlin / Java 响应式编程异步编程概念กันอางหนึ่งที่วันนนราจะมาอธิบายConcept 响应式จะนReอะไรกัน? 反应堆activeายถึง“ซึ่งการตอตนอง”ตัวอย่างเช่นเราเอนเล่นๆสแครชไปสแครชมาเป็นDJแน่นอนเพื่อนคงไม่ให้เราถูหัวเล่นอยู่อย่า่นั้นใช่ปะใช่ปะองมีสวนกัน มีActงแหละActก็จะมีReact 文本字段(Act)文本字段 “ค่าเปลี่ยนแล้วววววววววววว”(反应)…ทำนองนั้นภาษาทางเทคนิคเรียกว่าEmitถ้าเราพิมพ์“ Hello”ออกไปมันก็จะEmitหลังจากที่เราเคาะแป้นแต่ละที “ H”→发射 “他”→发射 “ Hel”→发射 “地狱”→发射 “你好”→发射 ถ้ามีคนตะโกนพูดก็ต้องมีคนฟังว่าไหม? ะาพูดคนเดียวนี่เหมือนคนบ้านะ55 订户/观察者ในที่นี้ยกตัวอย่างเป็น表视图ส่วนเส้นๆที่เห็นนั้นเนเรียก可观察的顺序 Textรั้งที่ค่าใน文本字段เปลี่ยน表视图จะรู้เสมอเพราะคอย观察อยู่👀ากนั้นจะเอาอักษรแต่ละตัวมาแสดงหรืออื่นๆก็แล้วแต่เราจะเขียนโปรแกรม จะมีนิดนึงคือจะมี订户มารอฟังกี่ตัวก็ได้และ可观察的ไม่จำเป็นต้องเป็นUIอย่างเดียวจะเป็นตัวแปรหรืออย่างอื่นก็ได้นะะ iOSนที่เขียนiOSมาบ้างแล้วอาจจะสงสัยว่าจริงๆแล้ว异步编程ในiOSก็ใช้กันปกติอยู่แล้วเช่น 大中央派遣 通知中心 关闭 委托模式 响应式编程เพิ่มหละ? ที่AppleมีAPIใSDKให้ใช้หลตัวซึ่งช่วตัวซึ่งช่วตัวซึ่งช่วก็มีวิธีกออไม่มีแต่งกลับกัไม่มีไม่มีเขีไม่มีไม่มีไม่มีไม่มี ใจรือการทำความเข้าใจ代码 表格检视 步骤การ实现ของTableView 设置“代理”ให้กับTableViewทำให้TableViewมันรู้ว่าถ้าจะโชว์数据ต้องไปถามใครว่า数据มีกี่แถวแต่ละแถวเป็นยังไง…ฯลฯ 采用“ Protocol”协议,TableView和协议2协议。 功能ที่ใช้returnจำนวนCell 函数ที่ใช้returnข้อมูลของแต่ละCell 5.在TableView中,使用Reload编程(Reactive编程)。 แหละ55) 载入中… งาดูตัวอย่าง异步อีกอันบ้างเกี่ยวกับการโหลดข้อมูล 步骤การ工具ของ加载东西 มี功能ที่ใช้จัดการเกี่ยวกับการ加载ข้อมูลต่างๆโดยจะรับClosureเข้าไปเป็น参数ตัวหนึ่ง 功能ก็ทำงานจะโหลดหรืออะไรก็ว่าไป… กอทำงานเสร็จก็จะมาเรียก关闭ที่เราส่งเข้าไป Functionาใช้งาน功能นี้ไม่ว่าใน类ใดก็ตามก็จะต้องใส่Closureเข้าไปเพื่อบอกมันว่าจะต้องทำอะไรต่อเมื่อทำงานเสร็จ ynนยังว่ามันเป็นAsyn […]