Tag: swift

如何在Amazon AWS上部署Swift后端

在本指南的最后,您将拥有应用程序的基本后端。 为了实现此目标,我们将使用服务器端Web框架Kitura,该框架允许我们使用Swift构建用于API端点的服务器,Postgres(一种开放源代码关系数据库)来存储数据,并使用Docker来管理资源。 现在可能您是WAT ?! 什么是API端点? 我会帮你! API是一种编程接口,由一个或多个向定义好的请求-响应消息系统公开暴露的端点组成,这些端点通常以JSON表示,并通过HTTPS协议公开。 在本指南中,我们将使用HTTP而不是HTTPS,因为最后,为了支持看似无关的字母,将有许多艰巨而漫长的步骤。 最后,我们将有三个API端点。 我们将能够查询这些端点以获得JSON响应。 该数据库是由三个表组成的数据库,这些表描述了旅行应用程序的结构。 行动! 我们到了。 首先,需要一些先决条件。 对于Kitura,如果您使用的是macOS,则需要安装Xcode 9或更高版本,并在终端上运行xcode-select –install 。 如果您使用的是Linux,请遵循本指南。 要继续,您将需要在计算机上安装其他软件包。 我建议您安装Homebrew,这是一种数据包管理器,使用以前的混乱安装可以简化您的生活。 现在已经完成所有设置,通过Homebew安装Kitura: $ brew tap ibm-swift/kitura $ brew install kitura 现在是时候安装Docker,这是一个功能强大的工具,可以帮助您管理可扩展的后端并轻松进行部署。 下载Docker并按照应用内步骤进行安装。 慢慢来,安装完成后,请登录并返回此处。 恭喜,您已经安装了所需的一切! 现在我们需要一个项目文件夹。 我们的层次结构由一个名为“ MyFirstBackend”的主文件夹组成。 在其中,我们将创建另外两个文件夹:“ 后端 ”,“ 证书 ”和“ 数据库 ”。我们将使用这些文件夹存储docker容器映像的规则。 稍后,在数据库文件夹中,我们将使用规则来创建……猜测:数据库。 相反,在后端文件夹中,我们将实例化Kitura项目。 看起来很有趣,对不对? 让我们深入研究吧! Postgres,该您了! 如前所述,Docker是执行操作系统虚拟化的功能强大的程序。 我们正在使用它,因为我们会将后端部署在云上。 这样,您将不必担心内存,空间以及普通虚拟主机的所有限制。 这要归功于云及其可扩展性。 让我们现在建立数据库! 在“ […]

工厂模式

工厂模式是一种封装创建对象的实现细节的方法,其中包含一个公共的基类或接口。客户端通过该公共接口接收创建的对象而无需担心其背后的复杂性。 工厂模式将创建对象的实现细节与公共接口分开。 例如,有一个Job门户,它向各种技术领域的求职者发送求职说明电子邮件。 首先,我们将创建接口(或协议),用于根据求职者的技能或兴趣向其发送定制的电子邮件。 现在,我们将创建一个模型对象,该模型对象将用于创建详细对象。 接下来,我们将创建几个遵守JobSeekerProtocol的模板对象 我们需要模板来将工作电子邮件发送给iOS开发人员,Android开发人员,Java开发人员和Windows开发人员。 我们希望对客户端隐藏这些对象的详细信息,而只公开仅了解协议的客户端接口。 现在让我们创建一个工厂,该工厂返回一个符合JobSeekerProtocol的对象,我们的客户将使用该工厂通过传递联系人对象来获取所需的对象。 我们的工厂隐藏了所创建对象的实现细节,因为当我们想对所创建的对象执行任何操作时,我们将使用接口方法。 我们可以在不更改客户代码的情况下从工厂更改工厂对象的实现。 现在,我们可以根据他们正在寻找的工作类型向他们的联系人发送自定义的电子邮件。 只要我们的界面不变,我们就可以根据需要扩展示例,而不必更改客户端代码。 这意味着我们可以添加新的职位和求职者对象,以将自定义的电子邮件发送给新的联系人类型。 工厂模式还遵循抽象,从而导致可重用的代码。 https://github.com/piyush23dez/FactoryPattern

启用幻灯片以在UITableView中删除。

我敢肯定,无论是滑动消息还是滑动电子邮件,您都已经完成了数百次。 在iOS中,许多UITableViews的外观如下: 好消息! 为此,它非常简单。 这实际上非常简单。 尽管您需要一个有效的UITableView来实现此目的,但我不会讨论如何设置UITableView 。 如果愿意,可以转到我的GitHub,下载我使用NSURLSession为获取JSON创建的项目示例,并填充UITableView第1部分。 希望到目前为止,您已经可以使用显示一些数据的UITableView了。 实施。 这只需要几行,因此您可以避免紧张。 添加此func : 在此函数内,我们需要: 检查提交的编辑类型。 从数组中删除对象 删除带有动画的行 我们可以这样做: 另一种实施方式。 这种方式要好得多,主要是因为没有if else陈述,我认为这很if else 。 因为在另一种方法中,如果要有更多选择,则需要实现if else语句来处理操作。 您还注意到,滑动时我添加了另一个选项:共享按钮。 做完了! 是的,就是这样! 很容易吧? 我希望本文能对您有所帮助,以便您现在可以继续并将其轻松实现到您的应用程序中。 像往常一样希望得到反馈。 评论和建议非常感谢。 让我知道接下来要写些什么! 谢谢。

在Swift中创建具有向后兼容性的核心数据栈

在2017年,我们生活在一个仍然存在非iOS 10设备的世界。 如果您的应用程序的目标版本早于iOS 10的iOS版本或macOS Sierra(10.12),您将无法利用Core Data的最新“堆栈创建”类NSPersistentContainer 。 所以,你可以做什么? 虽然NSPersistentContainer 确实旨在简化堆栈的创建过程,但最终还是要弄乱其中一些Core Data管道并不可怕。 创建核心数据栈的最终目标 创建核心数据堆栈的最终目标是获取NSManagedObjectContext的实例。 而已。 大多数依赖Core Data的应用最终都会发出获取请求来获取数据,或者连接其他类,例如NSFetchedResultsController 。 为了使这些事情起作用,您必须提供NSManagedObjectContext的实例。 NSManagedObjectContext是整个系统中的中心齿轮,它使其他齿轮转动。 所以。 底线:一旦有了NSManagedObjectContext实例,您就很NSManagedObjectContext 。 这就是创建核心数据堆栈最终为您提供的功能。 创建核心数据堆栈的3个步骤 可以大约3个步骤创建Core Data堆栈: 1)初始化NSManagedObjectModel的实例 这对应于您的.xcdatamodeld文件。 您需要浏览左侧的项目导航器,并找到.xcdatamodeld文件以记录此步骤的名称。 初始化NSManagedObjectModel //初始化NSManagedObjectModel let modelURL = Bundle.main.url(forResource:“ NameOfDataModel”,withExtension:“ momd”)保护let model = NSManagedObjectModel(contentsOf:modelURL!)else {fatalError(“未找到模型”)} //初始化NSManagedObjectModel 让modelURL = Bundle.main.url(forResource:“ NameOfDataModel”,withExtension:“ momd”) 警卫让模型= NSManagedObjectModel(contentsOf:modelURL!)else {fatalError(“找不到模型”)} 2)使用NSManagedObjectModel实例和NSPersistentStoreType初始化并配置NSPersistentStoreCoordinator实例 首先创建NSManagedObjectModel实例的原因是, 下一步取决于该实例。 NSPersistentStoreCoordinator将使用您的NSManagedObjectModel实例进行自我配置,并根据您要使用的NSPersistentStoreType准备创建正确的持久性存储类型。 在下面的代码示例中,我使用NSSQLiteStoreType创建一个SQLite持久存储。 […]

具有圆角和阴影的视图

在过去的几年中,移动和网络应用程序的总体设计模式一直持平。 借助iOS 7和Material Design,谷歌和苹果公司(紧随Windows 8的足迹,让我们在这里成为现实)宣布了崭新的设计模式。 平面UI非常棒。 它删除了看起来确实有点过时2000的时髦3D UI元素。 但是,随着iOS 11的发布,苹果似乎正在从更加突出的纯平UI转移到阴影和其他与深度相关的效果上。 它仍然是非常平坦的外观,只是带有一些用于指示用户如何与UI交互的附加信息。 上图中需要注意的一点是,单元格既有圆角,又有阴影。 为了在CALayer上圆角化,您需要执行以下操作。 扩展名CALayer { func roundCorners(半径:CGFloat){ self.cornerRadius =半径 } } 这会将拐角半径应用于图层— 仅将拐角半径应用于背景颜色和边框。 这很重要,因为如果图层中有任何 contents则需要将masksToBounds设置为true ,以使拐角半径剪切内容。 为了给CALayer添加阴影,只需要多几行代码。 扩展名CALayer { func addShadow(){ self.shadowOffset = .zero self.shadowOpacity = 0.2 self.shadowRadius = 10 self.shadowColor = UIColor.black.cgColor self.masksToBounds =假 } } 在支持视图的图层具有内容之前,在视图上同时具有阴影和圆角不是问题(范围可以从图像到其他非平凡的视图元素)。 如上所述,如果存在图层的contents ,则需要将masksToBounds设置为true才能应用圆角。 剪辑内容和显示阴影是不能同时存在的两种状态。 这是有道理的。 如果要在视图上放置阴影,则在视图上不能使用遮罩将其裁剪到边界,因为阴影会显示在视图边界之外。 要剪辑带有圆角的内容,您需要执行相反的操作。 因此,添加阴影并圆化视图的角点并不像听起来那样琐碎。 […]

RxSwift:Mengawasi可观察属性di Semua元素数组Secara Bersamaan dengan Observable.combineLatest()

Judul yang panjang,塔皮萨达提达克menemukan judul yang lebih baik untuk pikirkan oleh程序员pemula dengan kasus yang sama kecuali关键字di atas。 Jadi saya berharap dengan judul yang panjang namun jelas maka tujuan dari artikel ini telah didefinisikan sejak awal。 >简洁明了 就像Swift的方式一样! Kasus: Seperti yang saya katakan tadi,Kasussaya dapat disimpulkan oleh judul dengan cepat。 可以观察到Saya memiliki数组dari sebuah objek yang memiliki属性。 丹·赛亚·英金·琼脂·塞蒂亚普·佩鲁巴汉·达里·特雷塞普·阿塞·迪·塞巴坎·科塞蒂亚普的观察员yang […]

Swift 4.2初学者核心数据(CRUD)

核心数据是Apple在macOS和iOS操作系统中提供的对象图和持久性框架。 它是在Mac OS X 10.4 Tiger和带有iPhone SDK 3.0的iOS中引入的。 它允许将由关系实体-属性模型组织的数据序列化为XML,二进制或SQLite存储。 提取保存的数据的过程也非常容易。 它具有以下任务 准备实体的NSFetchRequest类型的请求(在本例中为User) 如果需要,使用谓词来过滤数据 从上下文中以[NSManagedObject]数组的形式获取结果 遍历数组以获取特定键的值 我们可以使用以下代码从Users实体中获取数据。 对于更新记录,我们必须使用与上述“检索数据”过程相同的谓词来检索/检索数据。 然后按照以下几步操作 使用实体谓词准备请求(在我们的示例中为User) 获取记录并使用键设置新值 并且Last Save上下文与创建数据相同。 对于删除记录,首先必须找到要通过fetchRequest删除的对象。 然后按照以下几个步骤删除记录 使用实体谓词准备请求(在我们的示例中为User) 获取记录以及我们要删除的记录 并进行context.delete(object)调用(参考下面的图片) 好吧,这还不足以支持核心数据,我们可以通过跟踪数据更改,添加谓词和数据库的复杂关系来完成许多复杂的事情。 随着您使用更多的核心数据,事情变得越来越复杂。 从这里下载完整的源代码

Como Programar en Swift con iOS 12(版本)

Hola,他在讲课后与学生们建立了联系,在讲课的过程中没有讲解,并且在课程中没有任何帮助。 第1部分->介绍los lo que veras en los教程 。 第2部分-> Primeros pasos en una app Parte 3-> Creando tuprimera应用程序! Parte 4-> Felicidades,有creado tu primea应用程序! 💪 第5部分> Hablemos de Playground🎮 第6部分-> 注释和 注释 从实践中获取经验的教程。 教程由Muchas gracias por seguir mi提供,而espero que sean de gran ayuda para ti。 没有任何人愿意像“拍手”或“像拍打一样”那样去做客。 更多信息,请联系我们。

UIInterfaceOrientation —仅在将应用设置为纵向模式时如何更改方向?

如今,大多数应用程序都基于纵向模式。 例如,来自客户端的要求是某个屏幕需要处于横向模式。 那怎么办呢? 并覆盖supportedInterfaceOrientationsFor,如下所示: 然后在您要在其中切换方向的控制器中。 编写以下函数: 最后,在您的viewDidAppear和viewDidDisappear中 : 运行并测试您的应用。 它应该工作正常。 特别感谢我们的团队成员Muhammad Raza为此开发了一个示例应用程序。 您可以在此处的链接中查看。 如果您有任何疑问,请随时将其放在下面的评论部分。 平安了!

为抽象类型聚合编写扩展函数

Swift本身是一种静态类型的语言 对于静态类型的语言,编译器在编译时必须具有有关类和函数的所有信息。 这意味着所有变量,常量和函数必须事先声明其类型。 但是,具有可以作用于不同类型的一种功能或一种方法仍然是可能的。 为此, Swift提供了强大的功能Generic 。 通用代码启用可以与不同类型一起使用的功能和类型 通常,功能通常是一段可重用的代码,用于执行单个相关的动作。 因此,函数的普通形式如下: func function_name(parameters: declared_type) -> return_type { //… Code here return typed_constants } 传统上,我们可以为相同目的单独创建函数以与不同类型一起使用。 但是,这意味着我们为每个唯一的类型声明基于相似的模式生成代码。 而且它以某种方式违反了以一种干净的方式进行编码并且免维护,这始终是程序员的目标和原则。 有鉴于此,我们需要一种抽象的方式,并能够以清晰的形式表达其意图。 这就是我们所谓的Generic 。 让我们从可以以不同类型重用的通用实体开始 通用实体必须具有类型参数。 下面的“ T ”代表通用实体最终将使用的任何类型。 struct GenericStruct { var someThing: T } // After above manner, GenericStruct can be constructed and parameterized over different types by adding […]