Tag: iOS应用开发

在Swift中链接异步函数

在本文中,我们将看到如何在Swift中使用函数组合来链接多个异步请求(不必用于RxSwift)。 编辑:Brandon Kase指出,这种组合实际上称为Kleisli组合,并且要使用的正确运算符是fish / Kleisli运算符: >=> (而不是|> )。 这很棒! 一件事:我建议使用> =>运算符代替|>,因为|>(称为管道转发)传统上用于向后函数应用程序。 您在这里拥有的是kleisli合成(并且> =>是kleisli合成运算符)。 -Brandon Kase(@bkase_) 2018年2月1日 [您可以下载本文的配套 Playground 。] 假设我们有一个具有以下模型的付款验证应用程序: 对Web服务的一般请求可能如下所示: 正如您应该猜到的那样,我们将使用函数组合来实现这一点。 让我们采用通用请求函数: func fetch(_输入:InputType,完成:(Result )->无效) 并用以下别名表示它: 公共类型别名Request =(T,@转义RequestCompletion )->无效 在我们的例子中,U将映射到 Result 。 接下来,我们将定义一个运算符,该运算符将允许我们通过管道传递请求。 分解> =>运算符 该运算符是T , U和V三种类型的泛型运算符,并使用2个函数f和g作为参数,其中: f取一个T并以Result g取一个U并以Result 。 它返回一个带有签名的组合函数: Request<T, Result>即接受f输入并以Result完成的函数。 注意: 输入为 T 类型 CombineCompletion的类型为RequestCompletion RequestCompletion<Result> 。 这个返回函数的实现从应用f开始,然后在f的完成块中,它切换一个Result 。 如果f以.success […]

在iOS移动应用程序中将Geofire与Firebase一起使用

在本文中,我们将学习Firebase和GeoFire。 以下是我们将在本文中讨论的要点。 1)什么是Firebase? 2)如何在iOS应用程序中使用Firebase? 3)Firebase提供的服务。 4)什么是地火? 5)如何将iOS中的GeoFire与Example集成在一起? 如果您对Firebase有所了解,那么对本文的理解将更加容易。 好吧,我们将首先从Firebase开始,然后我们将了解Geofire在iOS移动应用程序中的作用。 火力地堡: 什么是Firebase? Firebase是一项移动后端即服务,它提供了许多功能,可用于构建功能强大的移动应用程序。 Firebase提供的服务如下所述: Firebase服务: 实时数据库 认证方式 分析工具 动态链接 云储存 测试实验室 邀请 AdWords 崩溃报告 云功能 云消息传递 远程配置 代管 性能监控 应用索引 AdMob 从上述所有功能中,实时数据库是最独特,最有趣的功能。 之所以称为实时数据库,是因为无论何时在数据库中进行任何更新,所有用户都无需交互即可在其移动应用程序中获取真实数据。 我们将通过一个示例来了解实时数据同步。 在详细介绍示例之前,我们将首先了解如何注册使用Firebase iOS SDK。 以下是相同的步骤, iOS应用程序中的Firebase集成: 打开https://firebase.google.com/登录到您的google帐户,然后打开以下网址https://firebase.google.com/docs/,您会发现详细信息,如下图所示。 从上图提到的选项中选择“ iOS入门”。 选择相同的页面后,您将找到一个页面,其中逐步包含有关如何使用Firebase的所有信息。 但是,为了您的简单起见,我在这里也提到了所有步骤。 如果您还没有Xcode项目,请立即创建一个。 如果您没有Podfile,请创建一个: $ cd your-project目录 $ pod init 添加您要安装的Pod。 您可以像这样在您的Podfile中包含Pod: pod“ Firebase […]

使用自动布局使宽度和高度相等

自动布局很棒。 它大大减少了界面设计的工作量和不确定性。 一定要花些时间才能掌握。 但是,一旦您对自动布局感到满意,这真是一种祝福。 今天,我们将讨论一个这样的问题及其使用自动布局的解决方案。 问题: 让我们有一个带有UIImageView的视图控制器。 UIImageView必须位于屏幕中央,并且应为圆形。 对于所有喜欢变通方法的人们,不,我们不会在UIImageView中使用圆形图像。 我们将有一个常规图像,并使UIImageView投射为圆形。 这很简单,对吧? 是的,在大多数情况下。 但是,有一个陷阱。 如果您曾经尝试过创建圆形UIImageView,那么您会知道先决条件的。 前提条件要求您的UIImageView应该具有相等的宽度和高度。 如果UIImageView的宽度和高度相同,则只需分配半个宽度或高度的半径即可。 例如,您要有一个宽度为40的UIImageView。高度也必须为40 pts。 半径将为宽度和高度的一半,在此示例中为20。 如何使图像视图呈圆形? 如果您了解以上部分,则可能正在寻找代码段。 这里是 func makeImageViewCircular(imageView:UIImageView) { imageView.layer.cornerRadius = imageView.width / 2.0 imageView.maskToBounds = true } 方法的第一行将imageview宽度的一半分配给其图层的角半径。 请注意,半径是分配给图层的,而不是视图本身的。 这是您的操作方法(最终) 将图像视图拖放到视图控制器中。 使图像视图水平居中,垂直居中。 做到这一点的方法是按住ctrl并拖动到父视图(在这种情况下为UIViewController的视图)。 弹出窗口出现时,按住shift键并选择“在容器中水平居中”和“在容器中垂直居中” 上面的步骤将使您的图像在水平和垂直窗格中居中放置。 由于它在水平和垂直方向上都位于中心,因此它将最终位于屏幕的中心。 现在,我们需要使UIImageView的宽度与视图控制器的宽度成比例。 使UIImageView的宽度为其父视图宽度的一半。 现在,您有了一个图像视图,其宽度是其父视图宽度的一半。 最后一步是将图像的宽高比设置为1:1。 按住Ctrl键并将UIImageView拖到其自身。 选择宽高比并将其分配为1:1的值 现在,您应该在屏幕中央放置一个宽度和高度相同的圆形图像。

具有RxSwift的自动完成组件

反应式编程为代码重用提供了很大的机会。 使用RxSwift花费的时间越多,对我来说,将某些行为封装在可以在不同流程中使用的组件中就越直观。 我称它们为“ Rx组件”,既没有革命性也没有惊人的意义。 只是划分和征服Rx代码库的一种方法。 如果您想阅读其他人关于Rx世界的想法,请与我在一起-我们将构建Autocomplete功能。 我所谓的“接收组件”只是一个概念。 没有符合协议,也没有子类。 这是一般的插图: 对于其他开发人员,该组件是一个黑匣子 ,只有输入和输出要插入。 输入和输出在数量上是独立的。 组件实现行为 ,这是应用程序中的一个用例。 仅举几个例子: 自动完成功能—该组件接受简单的文本输入,并提供三个输出: 预测 , 错误和加载状态 (即网络调用或数据库查询)。 表格-接受多个不同类型的输入 。 提供相同数量的输出,每个输出针对相应的输入发出验证结果 。 验证结果可能包含描述数据错误的消息。 分页—接受具有给定索引的页面的输入,发出信号告知何时获取更多页面,并发出信号要求刷新第一页 。 加载状态输出是网络活动的简单指示。 每次组件获取新页面时, 页面输出都会发出整个已知页面集。 每个组件都应隔离,并且不可知 。 通过更改我们编排输出的方式,两者都使其可在不同的屏幕上重用。 一个示例可能是将分页组件的输出加载为在不同屏幕上转换为稍有不同的“等待”体验。 一旦我们构建了组件,就应该很容易对其进行单元测试 。 为了使其无缝,请确保所有依赖项都已被协议很好地抽象。 Rx Component 是一个黑匣子 ,只有输入和输出要插入。 它应该被隔离并不可知,以通过更改我们编排输出的方式使其在不同的屏幕上可重用。 希望您有主要想法。 如果没有,那没关系,我将逐步Autocomplete 在 RxSwift中构建Autocomplete 组件的 RxSwift 证明这一点。 这是我们将要构建的体验(请注意,活动期间状态栏中会显示加载指示器): 在Swift中也一样: 我的Rx组件是类 。 通常,它们符合某种用于依赖项注入的协议( AutocompleteType […]

Opener 1.4的新增功能

iOS 11就在这里,伴随它,我们为Opener准备了一个不错的更新! Opener 1.4现已上市,这是新功能。 让我们先消除明显的障碍。 我不是设计师,多年来有些人抱怨Opener图标的设计。 这个版本为Opener的图标带来了崭新的外观,该图标由了解Photoshop的人制作。 在iOS 11上,Opener看起来也很棒,带有大标题和重新安装了应用程序安装按钮的外观,以匹配所有新的App Store。 iOS 11公告中最值得注意的功能之一是拖放功能。 我们很自豪地宣布Opener 1.4支持拖放功能,您可以从任何地方拾取链接或文本片段,并将其拖放到Opener应用程序中以查看打开选项。 您也可以将浏览器行从Opener拖放到其他应用程序中。 除了上面提到的以iPad为中心的增强功能之外,还有一些对大家有用的东西。 进行了一项改进,使许多类型的链接打开得更快,包括在Safari中打开。 Opener现在可以更好地检测网页文本块中的链接。 Opener现在可以更好地处理以前无法使用的一些常见的流行重定向域。 如果您启用了Opener的AMP查找设置,并尝试打开已经是AMP链接的链接,我们将在不执行其他查找的情况下正确检测到它。 Opener 1.4现在可用,我们希望您喜欢它! 与往常一样,如果您有任何反馈意见,请随时发推文或给我们发送电子邮件。