为什么我喜欢SnapKit,您也可以

刚开始编码时,我100%参与StoryBoard团队。 很容易看到不同的UIView是如何交互的,您可以将它们精确地放置在所需的位置。 这适用于单个屏幕尺寸,但是随着视图变得越来越复杂并且需要适应各种屏幕尺寸,约束的层次结构变得越来越难以确定。 尽管如此,程序化还是令人恐惧! Swift的内置方法是噩梦。 即使我现在已经全心全意地通过程序设计应用程序,但仅查看这些方法仍然会让我感到恐惧。 幸运的是,令许多程序员感到宽慰的是,SnapKit幸运的灵魂为iOS和OS X设计了一个完全用Swift编写的疯狂简单的自动布局DSL! 首先,只需在pod文件中使用pod ‘SnapKit’安装SnapKit CocoaPod,然后打开项目的.xcworkspace。 以编程方式设计应用程序需要一些设置。 首先转到您应用的“常规设置”,然后在“部署信息”的“主界面”下,删除“ Main所在的位置。 这告诉您的应用不再担心故事板! 尽管如此,应用程序仍需要一个切入点……这就是AppDelegate发挥作用的地方。 在这里,您要声明第一个ViewController的实例。 (如果您使用的是UINavigationController,UITabBarController或ContainerViewController,则也可以在其中进行设置,但现在我们将使用单个ViewController)。 在AppDelegate的func application(… didFinishLaunchingWithOptions…)方法中,将window初始化为具有与UIScreen绑定的框架相同的框架的UIWindow() ,然后初始化主ViewController。 接下来将window?.rootViewController设置为与您新创建的ViewController相等,并使该window可见! 五行代码,您的应用程序将打开您指定的ViewController。 现在,让我们来看看有趣的东西吧! 当然,第一步是导入SnapKit。 (如果它声称不存在这样的模块,请给它旧的Command + B;还要检查您是否在xcworkspace中工作,而不仅仅是xcodeproj)。 通常,我制作的第一个UIView会占据整个屏幕,因此让我们创建一个mainView: UIView!实例mainView: UIView! ,对其进行初始化,然后将其添加到ViewController的view将其设置为等于屏幕的大小。 在mainView.snp.makeContraints方法中,每次您写入$0它只是简单地引用受约束的-view本身! 将边缘设置为equalToSuperview将允许此View扩展到其superView(UIScreen的view )所允许的最大范围。 这是一个简单的介绍,但让我们看看snp.makeConstraints还有哪些其他选项。 现在我们有了背景视图,让我们在可能要显示一些常规信息的地方添加标题。 此新视图将添加到mainView顶部,并将与Screen / SuperView的高度成比例: 请注意,如果属性有所不同,如何将不同的约束链接在一起,并添加新行。 这使得代码非常容易键入和阅读! 在这一点上,我们有一个mainView,大小为UIScreen的青色,还有一个headerView的彩色迷离,它覆盖了屏幕的前25%。 让我们添加一个Label并将其直接放置在headerView : 使用UILabels,您不必将它们设置为特定的高度或宽度。 取决于您选择的文字和字体/大小。 这样,您只需给它一个X / Y轴位置,Xcode就会假定其余的位置。 最终结果应显示3/4青色和1/4蓝色屏幕,其中标签直接位于蓝色部分的中心。 SnapKit中提供了许多其他方法,其中大多数是完全不言自明的。 例如,如果我们希望mainLabel位于屏幕中央,但在蓝色headerView ,则可以删除centerY约束并添加新行,指示$0.top.equalTo(mainHeader.snp.bottom).offset(10) […]

WBSwiftyMenu

WBSwipeableCell用于在TableViewCell和CollectionViewCell中显示选项菜单。 我们制作了此菜单,以在单个单元格中显示多个选项。 Apple在一个单元格中最多支持3个项目,但是在我们的控制器中,您可以添加3个以上的项目。 我已经从这个控制器中获取了这个想法-> https://github.com/SwipeCellKit/SwipeCellKit 背景 我已经为tableviewcell和collectionviewcell使用了许多菜单,但是它们都有一些局限性。 WBSwipeableCell用于菜单项过多且需要在一个视图中显示的地方。 示范 菜单垂直布局 对于Vertical菜单布局,我们需要实现MenuViewDelegate协议的一种可选委托方法,如下所示 func menuView(_ view:MenuView,menuLayoutForRowAtIndexPath indexPath:IndexPath)-> MenuLayout { 返回.vertical } 菜单方块布局 对于Square菜单布局,我们需要实现MenuViewDelegate协议的一种可选委托方法,如下所示 func menuView(_ view:MenuView,menuLayoutForRowAtIndexPath indexPath:IndexPath)-> MenuLayout { 返回.square } 菜单水平布局 对于水平菜单布局,我们需要实现MenuViewDelegate协议的一种可选委托方法,如下所示 func menuView(_ view:MenuView,menuLayoutForRowAtIndexPath indexPath:IndexPath)-> MenuLayout { 返回水平 } 有关此控制器的详细信息,可以在Github上进行检查:https://github.com/mwaqasbhati/WBSwipeableCell 我希望大家分叉它,并帮助我改进此库。

使用Swift-NIO开发基本的Swift Echo Server

我不是Java或JVM类型的开发人员。 这可能是我从未感到需要尝试Netty框架的原因之一。 我一直在用Erlang,Elixir或Go开发所有高性能服务器代码,并对工具感到满意。 但是,Apple最近发布了Swift-NIO,这是一个用于开发跨平台服务器和客户端应用程序的新库和框架。 我不是前端开发人员,而是更具可伸缩性的后端开发人员。 就是说,我喜欢Swift编程语言,并且自从Apple在2014年发布它以来就一直关注着它的进步。这就是为什么这个新框架引起了我的注意。 编写服务器端软件有多好? 由于Swift-NIO是Netty的一个端口,它是由Netty杰出贡献者Norman Maurer领导的团队开发的,因此我首先研究了Netty设计,以更好地了解Swift-NIO的工作方式。 我喜欢我所读到的东西。 Netty的概念提供了很好的通用抽象,这是好的网络应用程序所共有的。 它是一个参考框架,在Java世界中用于构建许多非常高级的服务器和客户端工具。 这些概念与Swift编程语言非常吻合。 很好的契合度让我认为这确实可以加速Swift服务器端开发和跨平台推广。 我敢打赌它可能会产生很大的影响,并帮助Swift继续迅速崛起为顶级编程语言之一。 Swift-NIO依赖于非阻塞IO。 这意味着您可以通过使中间层分派准备好处理到工作线程的网络操作的方式,来管理相对数量的线程,从而管理大量的网络连接。 因此,从处理线程的角度来看,网络操作是无阻塞的。 他们可以完全使用CPU,因为它们可以共享大量套接字的网络操作,而无需等待。 在Swift-NIO措辞中,阻塞操作被委派给通道。 通道将网络操作上的事件触发到负责管理通道的事件循环。 开发人员将服务器或客户端的逻辑作为处理程序提供给事件循环。 处理程序是实现触发网络事件时执行的操作的代码段。 可以将它们组合在处理程序管道中以提供额外的灵活性。 这为去耦增加了一层,并使处理程序更可重用。 在客户端服务器环境中,“ Hello World”应用程序通常是“ Echo”服务器。 服务器接收客户端发送的内容,并将其发送回客户端。 使用Swift-NIO非常容易实现。 让我们看看如何做到。 请注意,以下步骤已在MacOS上进行了测试,但是如果您已安装Swift,则它们也应该在Linux上也可以使用。 您可以使用Swift命令行引导项目: $ mkdir EchoServer $ cd EchoServer / $ swift package init —键入可执行文件 创建可执行程序包:EchoServer 创建Package.swift 创建README.md 创建.gitignore 创建源/ 创建Sources / EchoServer / […]

使用OpenWhisk的无服务器Swift

Swift是开发人员中增长最快的编程语言之一。 Swift排名前15位,比我们追踪的任何其他语言都要快。 RedMonk编程语言排名 redmonk.com/sogrady/2017/03/17/… 该语言是为构建移动应用程序而创建的,现已在后端开发中流行。 但是,对于开始构建后端应用程序的Swift开发人员而言,他们现在发现自己必须管理计算基础架构才能在云中运行其应用程序。 进入无服务器云平台…☁️☁️☁️ 这些服务允许开发人员将代码(而不是VM)推送到云中。 该平台允许您将外部事件源(例如API请求或消息队列)连接到代码中的函数。 当事件发生时,您的代码将被实例化并执行以处理每个请求。 开发人员仅需为处理每个请求所需的毫秒数付费。 无服务器平台使您可以在云中运行应用程序,而不必担心基础架构。 😎 Apache OpenWhisk 是当前唯一支持Swift语言功能的无服务器平台。 让我们先看一下如何在OpenWhisk中使用Swift,然后再深入研究该平台如何实现此功能,为我们提供一些有关OpenWhisk上Swift的提示和技巧。 Swift on OpenWhisk 使用CLI 使用以下源代码创建一个Swift文件。 func main(args:[String:Any])-> [String:Any] { 如果让name = args [“ name”]为? 字符串{ return [“ greeting”:“你好\(名字)!” ] }其他{ return [“ greeting”:“你好陌生人!” ] } } 快速动作必须消耗并返回字典。 作为函数参数传递的字典将包含事件参数。 返回的字典值必须支持序列化为JSON。 使用命令行实用工具创建并调用新的OpenWhisk操作。 $ wsk action创建swift action.swift 好的:快速创建动作 $ wsk操作调用swift –result […]

选择第二种语言:Swift To Python

为什么选择Python以及它的样子 Swift是开始工作的好方法。 我从来没有写过一行代码。 作为一个完整的编程初学者,花了13个月的时间进行设计,自学,编码,重新编码,然后启动我的第一个完整应用程序。 我为此感到无比自豪,这是人们每天都在玩的新颖游戏。 除了保持最新状态并推出新功能外,任务还很完整。 现在有这个东西。 一旦我变得根深蒂固地思考代码,就可以用这种技能来完成所有可能的事情。 在这种情况下,仅了解Swift的问题也变得显而易见。 尽管我喜欢Apple生态系统,但通过编写Swift代码,我只能覆盖50%的移动用户和不到4%的桌面用户。 我要编写的下一个软件是台式机软件。 这些是我主要为自己创建的程序,但是还有很多其他人可以从中受益。 如果用Swift编写它们,则只能覆盖4%的用户。 如果我用Python编写它们,几乎可以接触到所有人。 为什么是Python? 我可以达到更大的用户群。 有些工具在Python中可用,而在Swift中可能永远无法使用。 对我来说,那个库是Tensorflow。 有大量的稳定框架可用。 我可以为台式机,网络甚至移动设备编写Python。 不是说我会为手机编写它。 我可能不会,但是选项在那里。 您几乎要问的每个问题都已经在StackOverflow上得到了解答。 SO上的Python标签:〜596k。 SO上的Swift标签:〜100k 这需要多长时间? 比使用第一语言的时间要少得多。 几天之内,您就可以编写出基本的软件。 语法如何比较? 非常相似。 点表示法,函数参数以及您编写的许多代码看起来都一样。 空格是Python使一切保持秩序的方式。 您将不会使用方括号来打开和关闭函数或类。 这意味着,起初,一切都会看起来很杂乱。 最大的挑战是什么? 命令行。 我对命令行并不感到陌生,但是Python需要一定水平。 带有它的学习曲线可能会令人沮丧,但没有什么不同。 您做得越多,就越容易。 Python文档不那么友好,它没有像Xcode这样的强大IDE。 大多数语言都没有。 进行设置并习惯于新的IDE。 PyCharm是我的选择。 我设法从Xcode移植了大多数语法颜色设置和键绑定。 这是一个持续的过程。 如果您过于依赖UI的故事板,那么使用新语言会困难得多。 故事板可能很棒,但我建议在没有代码的情况下进行所有UI操作时,请不要使用所有UI。 编程界就是这样做的。 签出此内容以使用没有情节提要的面板,并查看代码中的布局对齐方式。 与其他IDE相比,Xcode中的自动完成和预测功能令人难以置信。 直到我开始为别人购物时,我才意识到自己有多依赖。 我输入的内容比使用Swift时要多。 我是否已经停下来质疑这是否是一个好的决定? 是。 但是到目前为止,只有一个原因。 […]

Xamarin iOS验证文本字段教程

我最近开始涉足移动开发。 特别是使用Xamarin iOS。 这是一次很棒的经历,我正在一个副项目上取得重大进展,我希望它将在未来几个月内达到足够的体面并向公众发布。 如果您像我一样,那么您不是UI / UX或设计方面的专家-也不想花很多时间假装自己-但当您的应用在原型制作过程中看起来像是一团糟时,您一定会感激不尽并获得功能布局。 为此,重要的是要拥有随时可用的工具,以便在保持整洁外观的同时快速进行原型制作。 在这篇文章中,我将提供有关如何实现这样一种工具的教程。 我想这是向您介绍我的平面和最小验证文本字段的地方: 如果这看起来有用,请继续阅读。 我要直接跳进去! 我想指出的是,在本教程中,我假设您对Visual Studio和Xamarin iOS有一定的了解。 但是,如果您是一个全新的人,而我却很快地浏览了所有内容,我很乐意回答问题! 您可以在 此处 参考完整的源代码 。 让我们从创建一个新的单视图应用程序开始。 项目加载后,打开情节提要并添加新的UITextField并执行以下操作: 给它一个标识名(我使用了NameTextField) 将其尺寸调整为275px x 30px 删除边框样式 删除初始文字 添加占位符文本 可选:添加约束 您应该最终得到类似于以下内容: 您显然不需要使用任何自定义字体,但是在本教程中,我使用了EB Garamond和Oswald。 对初始视图控制器满意后,保存情节提要并退出。 现在获取一些实际代码。 我们要做的第一件事是添加用于着色UIView边框的功能。 我们将通过扩展方法来实现。 将一个新的类文件添加到您的项目,名为UIViewExtensions.cs。 初始代码如下: 在进入验证文本字段之前,让我们进一步进行边框着色功能,并创建一个名为BorderedTextField的新类。 创建一个名为BorderedTextField.cs的新类文件,并按如下方式填充它: 我真的希望你们中的一些人觉得这有用。 如果您有任何疑问或反馈,我希望听到,所以请联系。 否则,谢谢您的阅读! 再一次,您可以在 此处 引用完整的源代码 。

Swift中的二叉树

Binary Tree的极大好处是可以增加搜寻的效率。 如果一个array = [10, 5, 7, 14, 11, 20] 10,5,7,14,11,20 array = [10, 5, 7, 14, 11, 20] ,我每次都要从头搜寻一遍,时间复杂度为O(n) 。 但是如果我用Binary Tree,时间复杂度就会下降到O(log n) 。 节点的结构

使用CocoaPods和Carthage分发封闭源框架

每个开发人员都会不时地努力工作。 为了实现我们想要的功能,我们从博客,书籍,Github页面(源代码,要点,问题–顺便阅读Github问题可能会非常有帮助)中进行阅读,堆栈溢出线程等。我们从上述所有来源中收集很少的信息并收集它们寻找解决方案。 对于我们大多数人来说,在解决了我们的问题之后,我们就解决了。 但是,如果我们忘记了,或者我们不准备再做一次该怎么办? 写下我们在此过程中遇到的挑战是一个好习惯,但是我们当中有多少人呢? 大多数时候,我们选择we懒的方式。 我会记住它,或者会再次找到相关的东西。 这次,我将改变态度,并写出在与CocoaPods和Carthage一起作为封闭源项目分发我们的框架时遇到的挑战。 我希望这篇文章可以帮助某人节省时间并保持神经😄 让我们从列出我们正在做的事情开始: 我们正在构建一个简单的框架(本例中为付款结帐服务)。 现在,我们自己完成所有工作,这意味着我们的框架没有内部依赖性。 (好吧,如果您嵌套了依赖项,那么本文将不再涉及它们,因此,您将学到更多内容,但是请相信我,它们并不难。) 框架使用Objective-C编写,以支持两种语言。 尽管我们是Swift的粉丝,但出于某些考虑,我们还是选择了Obj-C。 (如果您拥有Swift框架,则可以像本文中一样应用所有内容,因此不用担心👊🏻) 我们希望将代码作为封闭源分发。 因此,我们将分发通用二进制文件(.framework文件)。 通用意味着该宝贝将在物理设备和模拟器的所有体系结构上工作。 我们正在使用Github作为我们框架的宿主。 我听说在进行聊天之前已经足够了,在我们开始之前,我假设您都已经在Mac上安装了CocoaPods和Carthage并熟悉它们和一些终端命令(实际上,我确定,因为您要分发您的框架以及一些依赖项管理器😄)。 迦太基 https://github.com/Carthage/Carthage/pull/1760,直到出现该拉取请求,您才能将框架发布为封闭源。 它相对较新,因为它已于今年2月14日❤️推送回购。 (编码code真是糟糕的一天) 迦太基手册将这一过程命名为将预先构建的框架归档到一个zip文件中 ,该文件缺少有关如何读取日志的信息,等等。我们现在将进行遍历。 如果Carthage附加到项目存储库上的GitHub Release或通过二进制项目定义文件,它们可以自动使用预构建的框架,而不是从头开始构建。 要为特定标签提供预构建的框架,应将所有受支持平台的二进制文件一起压缩到一个存档中,并且该存档应附加到与该标签相对应的已发布发行版中。 附件名称中应包含.framework (例如ReactiveCocoa.framework.zip ),以向Carthage指示其包含二进制文件。 您可以使用carthage archive命令执行上述归档操作,如下所示: 迦太基建造-无漏电流 迦太基档案YourFrameworkName 开始之前,请在Xcode上打开框架项目,然后通过Command + Option + Shift + K干净地构建项目。 (清洁文件夹会在大多数情况下将您从恶魔中拯救出来) 打开一个终端并导航到您的项目文件夹。 carthage build –no-skip-current到终端。 (首先,我将显示失败的构建和处理方法。然后,我们将继续)

构建像Uber这样的出租车预订应用程序

首先,由于其出色的服务,Uber是数百万人使用的出租车预订应用程序。 点击电话即可预订私人司机。 最近的汽车将在几分钟之内接您。 一定要考虑使像Uber这样的出租车预订应用程序吗? 可能会出现问题,费用是多少? 请记住,没有人能估计开发像Uber这样的出租车应用程序的确切成本。 这一切都取决于各种各样的事情:应用程序体系结构和开发速度,功能,国家和行业以及数百种其他情况。 后端编程语言:对于android,我们使用Kotlin / Java;对于iOS,我们使用Swift编程语言。 除此之外,我们使用Laravel,Node.js,Socket和Google Firebase。 一些特定于平台的工具适用于Android的Google Map API和适用于iOS的MapKit / CoreLocation。 对于支付网关,我们使用PayPal Mobile SDK。 成本估算完全取决于我们的开发过程。 后端开发 Web开发 本机应用程序开发(适用于Android / iOS) 应用程式设计 质量保证 好吧,您可以从我们这里聘请专门的应用程序开发人员来定制您的应用程序开发解决方案。 与我们明确讨论您的项目,我们将满足您的业务需求。 期待您的回音。 技术指数 春谷路5001号 东400套房 达拉斯 TX 75244 (321)806–2936 (星期一-星期五,上午8:30-下午5:30 EST)

使用iOS应用程序抓取Firebase服务

那是晴天的时候之一,那时我回到家,终于有时间从我的购物清单中计划好美食应用程序。 不管是好是坏,我不仅需要进行应用程序设计,而且: 身份验证。 我可以在其中保存和检索内容(数据,信息,图像)的数据库。 可搜索的食品API。 大概,我需要一个认真的人加入我自己的小团队。 或者,我可以一个人做吗? 或多或少😃。 简短答案-是的! 因为我一方面找到了价格合理的可搜索食物API,另一方面又找到了Firebase 。 长答案? 继续阅读! Firebase是面向移动开发人员的统一平台(是的,适用于Android和iOS),提供了许多很棒的功能,其中包括实时数据库,崩溃报告,分析,身份验证等。最好在以下位置查看整个列表:他们的官方网站。 我写的最后一篇文章包括一个项目 名为Unicorner,旨在接收带有Unicorner用户看到并拍照的独角兽图像的远程通知。 这次,该项目将要拍摄独角兽的图片并将其上传到数据库。 然后,来自数据库的数据将被馈送到一个列表,在该列表中可以看到上传的图片和信息。 通知不会发送,但我们可以在另一篇文章中进行处理,对吗? 无论如何,这是计划的文章工作流程: Firebase帐户注册和iOS应用程序配置。 在Xcode中设置Demo项目。 编写一些代码以与Firebase实时数据库和存储进行通信。 实际上,这很简单。 首先转到此链接,然后单击屏幕右上方的“ 登录”按钮。 可以使用gmail帐户( 大多数人都拥有一个 )登录,也可以按照注册步骤创建新帐户来登录。 完成后,再次点击右上方的转到控制台 , 进入 Firebase控制台。 这是可见的: 我的Firebase控制台中已经有一个正在处理的应用程序项目。 要添加另一个,只需点击添加项目,然后看到此模式: 我为我的项目选择的名称是UnicornUploader和 我选择的地区是美国。 根据需要选择,然后单击创建项目 。 在创建项目时稍等一下,瞧: 点击“ 继续”后 ,您将进入“ 项目概述”页面: 在这里可以访问Firebase提供的所有功能。 确实,在本文中,我将仅关注三个方面-身份验证,数据库和存储。 您确保在时间允许的情况下将它们全部检查出来。 将Firebase添加到iOS应用 是时候选择将Firebase添加到您的iOS 应用程序中,以将Firebase添加到我的iOS应用程序中 : 我已经输入了演示项目的iOS Bundle ID,对您的演示文稿也做了同样的操作,然后点击Register […]