Tag: 编程

Swift 4中的命令模式

命令模式将请求封装为对象,从而使您可以将具有不同请求,队列或日志请求的客户端参数化,并支持不可撤销的操作。 当需求类似时,命令模式很有用–会有很多操作要做一个接一个的操作。 考虑到每个操作都非常耗时,因此您不能直接调用执行该操作的方法。 传入操作请求的速率高于整理每个操作。 要处理这种情况,您需要将每个操作/命令封装在一个对象(又称为命令对象)中,并将它们存储在队列中。 然后依次处理从队列中取出的每个命令。 这一切都与命令模式有关。 命令模式在日志记录框架,数据库事务和计划的操作中有多种用法。 Command模式的另一个不错的方面是Command Executor (可以是单独的线程)不需要知道命令以及与要执行的命令相关的上下文信息。 这样,可以随时构建更多的命令/操作,而无需更改已编写的现有代码。 类型:创作模式 也称为:动作,交易 结构体: Swift 4实现: 我们的上下文将是一个Book对象,我们要在其上执行不同类型的命令。 将有3种命令类型: Buy,Sell,GiftFriend 。 BuyCommand:从图书馆购买书籍,然后将所有者设置为我。 SellCommand:将书籍出售到图书馆,并将所有者设置为图书馆。 GiftFriend:将书赠给提到名字的朋友。 让我们编写上下文类Book。 您可能会对Book类中的buy(),sell(),giftFriend()之类的方法感到惊讶,并问自己这些方法应包含在命令类中。 没有! Command对象将调用这些方法,因为这些方法将执行实际任务。 如前所述,三种命令类: CommandExecutor负责一个接一个地运行命令。 它可能是一个不同的线程,但是为了简洁起见,在这里我们使用了while循环和runCommand()方法,它将一个接一个地运行所有命令,直到命令队列结束。 现在像往常一样,感受命令模式的力量。 您可以在此处找到完整的源代码:Github

在辅助项目中被旁听的好处。

史蒂夫·乔布斯(Steve Jobs)更著名的名言之一是“ 焦点是对数千个好主意说不 ”。 我发现大部分时间都是如此。 如果您的目标是生产产品或完成特定任务,那么将重点放在需要完成的事情上就很重要。 我相信大脑在解决问题时会找到模式和联系是很自然的,有时这些模式和联系可以使自己产生吸引人的想法。 当然,如果您沿着使自己可以使用的每条路径走下去,那么您将永远找不到想要去的地方。 但是,当涉及到附带项目时,我认为值得不时失去关注。 至少对我而言,辅助项目的重点是探索我发现的有趣事物,尝试新事物并扩展我的知识,超越我在工作中所做的事情。 因此,如果一个完全独立的想法来自于一个副项目,那么如果有意思,我会加入。 举例来说,我一直在学习Swift,并且一直渴望在应用程序上使用新发现的知识。 经过几个小时的研究,我决定使用Apple的SpriteKit和Swift构建游戏。 我已经弄清楚了高级设计和游戏机制。 我等不及要开始了。 该游戏原本将是单词搜索游戏,在搜索到单词时,网格会扩展。 我认为这是一种相当聪明的机制,它将使游戏变得更加有趣和动态。

快速提示:向UIView添加圆角和阴影

为什么看似简单的事情很难 背景故事 我已经在一个应用程序上工作了几年,并且收到了一个简单的设计请求:在视图上四处拐角并添加阴影。 容易吧? //设置拐角半径 layer.cornerRadius = 6.0 layer.masksToBounds = true //设置阴影属性 layer.shadowColor = UIColor.black.cgColor layer.shadowOffset = CGSize(宽度:0,高度:1.0) layer.shadowOpacity = 0.2 layer.shadowRadius = 4.0 错误! 如果您以前尝试过此方法,那么您将确切知道会发生什么。 角将变圆,但阴影将消失。 如果将masksToBounds设置为false,则将显示阴影,但不会对角进行圆化。 CALayerWhyAreYouDoingThisToMe 事后看来, layer.masksToBounds = true的原因实际上是显而易见的,它会layer.masksToBounds = true该图层之外的所有内容。 阴影将在图层外部绘制,因此也会被剪切。 因此,我们不能对这两种效果使用同一层。 解决方案 我将分享我发现阻力最小的路径。 我选择创建一个固定在父view边缘的内部containerView 。 阴影将应用于父view的图层,而圆角将应用于containerView 。 然后,只需将所有内容添加到containerView 。 我敢肯定,也可以使用子图层和蒙版来完成此操作,但是使用AutoLayout时会遇到一些麻烦,因为我们不知道布局时视图的大小。 这将需要覆盖视图控制器中的layoutSubviews或视图控制器中的viewDidLayoutSubviews以便更新图层路径,但是坦率地说,这比看起来如此琐碎的事情要花更多的精力。 检查以下要点。 评论很好,所以应该很容易理解。 更新! 我偶然发现了StackOverflow帖子(当然),找到了可以用来避免添加子视图的替代解决方案。 魔术发生在: shadowLayer.path = UIBezierPath(roundedRect: […]

2018年最值得学习的10种编程语言

保持领先是业务和技术创新的关键因素之一。 拥有600多种独特的编程语言,为您的项目选择最佳的编程语言可能很困难,并且可能是初始开发阶段最困难的部分。 为了帮助您,以下是我们在2018年学习的十大潜在编程语言列表,以帮助确定用于项目的最佳编程语言是评估项目需求。 1. Swift :这是比Objective-C更流行的语言,它是开发本机iOS或Mac OS应用程序的语言,并且是重塑未来的最有可能的编程语言。 已经发现本机应用程序胜过跨平台混合应用程序,而SpriteKit使构建2D游戏变得更加容易。 确实,它以C和Objective-C的成功为基础,没有兼容性的限制。 它在很大程度上受Ruby和Python的影响,被认为是用户友好且易于使用的。 Swift是一种高级语言,通常易于维护,是Apple为iOS开发的通用多范式语言。 因此,如果与Apple产品合作是您的利基市场,那么这就是适合您的语言。 作为静态类型的语言,意味着Xcode会为您检查错误,因此您的错误更易于跟踪,而且,随着事物的定义更加明确,它的运行速度也更快。 Swift拥有领先的竞争优势,因为它还拥有自动引用计数(ARC),这是一项众所周知的功能,可以实时跟踪和管理应用程序的内存使用情况,以确保不会占用过多的内存。 使用这种语言可能会给您带来优势,因为iOS应用程序通常比Android应用程序更有利可图。 2. Ruby :1993年由Yukihiro Matz Matsumoto诞生的一种通用的,面向对象的编程语言。 它的需求量是Python的5倍,它是增长最快的编程语言之一,对于大多数已完成的项目,Java才可见。 实际上,Ruby非常易于使用,您可以在10分钟内在其中创建一个应用程序。 Groupon,Airbnb,Pxlr和Bloomberg都用Ruby编码,还有更多。 Ruby以动态的,面向对象的方式运行,因为它的读法类似于英语,因此使代码易于阅读。 需要维护许多高端网站的代码数据库,因此Ruby的需求不断增加,以至于在DevOps角色中变得很常见,即工程师确保运行高流量网站的服务器的可靠性和效率。 根据您公司的需求,这可能是您的理想之选。 3.由于WordPress, PHP被广泛使用。 在前1000万个网站中,有80%以某种方式使用PHP,包括Facebook和Wikipedia。 关于如何构建特征没有硬性规定,并且它具有解决问题的灵活性。 它以自由职业者的身份或流行的内容管理系统进一步得到广泛使用。 这是Web开发的绝佳选择,因为它主要是服务器端脚本语言,是WordPress和Facebook的基础。 因此,对于Web开发而言,学习PHP是成功的必备条件。 学习PHP使您能够创建令人惊叹的动态网站和Web应用程序。 您可以将PHP用于各种Web开发项目,包括电子商务,移动应用程序开发,内容管理系统。 它是一个开放源代码,易于学习,具有简单的数据库集成,并且具有许多应用程序和用途。 4. C ++ :它创建于1983年,是对C的替代,并有充分的理由立即受到欢迎。 它具有预定义的类,可以与程序员可能已经在使用的类一起使用。 Microsoft Windows和Google Chrome是使用C ++创建的两个最著名的项目,实际上,大多数Adobe和许多亚马逊网站都是用C ++编写的。 由于该编程语言是一种功能强大的工具,可适用于金融,银行,游戏,电信,电子银行,零售等多个领域,因此仍然需要这种编程语言。 确实,学习C ++使您能够轻松编写应用程序以及游戏和商业软件的代码。 它是目前最强大的语言之一,并具有多种功能,包括依赖于平台(即,该程序在与开发该程序相同的操作系统中执行)。 5. C :成立于1972年,使程序员能够在UNIX操作系统中进行编写,但事实证明它仍然非常非常受欢迎。 它是世界上使用最广泛的编程语言之一。 而且由于它以“机器级”语言运行,因此您将能够了解程序与硬件的交互方式。 […]

View Controller生命周期介绍:何时使用viewDidLayoutSubviews

作为iOS开发人员,我们总是担心自己缺乏知识,有时我们感到自己的技能不足。 我们对所有程序员说,您足够了解并且对自己耐心,因为您在日常工作或编码方面的嗜好继续保持​​卓越。 许多不同的开发人员总是会列出很多清单,说很多不同的事情,我们作为iOS开发人员首先应该知道。 但是多少钱够了? 今天,我们将专注于小事情,这些小事情将有助于使我们更加清晰地了解,以建立更牢固的基础。 我们将首先了解在新项目中每天使用的那些小代码。 我相信,小的小事情将使我们对大的事情有更大的了解。 在本教程中,我们将解决viewDidLoad , viewDidAppear和viewDidLayoutSubviews之间的差异。 到本教程结束时,我们希望您比以前有更好的理解,并能够有效地使用上述方法。 我将尝试使用许多不同的方式来解释这些方法,因为有时很难理解一条语句,这是我们大多数人都理解的真正斗争。 您可能会看到重复的解释,我将尝试用不同的词来解释,以帮助您从不同的角度理解它。 您应该现在就熟悉该方法,或者至少对每次运行代码时的作用有一个大概的了解。 每次创建项目时,您都会看到此代码。 如果您不这样做,那完全没问题。 Apple在viewDidLoad上给出的定义提到, 在将控制器的视图加载到内存之后调用该定义。 简而言之,它是第一个加载的方法。 您可能正在考虑在什么条件下可以充分利用此方法? 答案是,基本上您希望应用程序首先加载。 例如,您可能想要不同的背景颜色,而不是白色,则可能选择蓝色。 你们中有些人可能有使用这种方法的经验,并且对它有些了解,而有些人可能会发现这种新方法。 无论您的经验如何,您至少会在项目中使用其中之一。 苹果将​​其定义为“通知视图控制器其视图已添加到视图层次结构中。 换句话说,它基本上意味着在向用户显示屏幕时将调用此方法。 viewDidAppear和viewDidLoad之间的区别是,每次您在屏幕上着陆时都会调用viewDidAppear ,而viewDidLoad仅在应用加载时被调用一次。 让我向您展示一个简单的实验,以帮助您了解其工作原理。 我将使用一种更现实的方式进行解释。 您将在viewDidAppear看到,我通过添加300将viewDidAppear的位置创建在屏幕外部,并且我正在使用动画将图像从屏幕外部移动到屏幕底部中心。 到目前为止,您应该已经了解并理解,通过上述示例, viewDidAppear被重复调用,而viewDidLoad仅被调用一次。 苹果对此表示了很好的解释,称其被通知来通知视图控制器其视图刚刚布置了其子视图 。 换句话说,每次更新,旋转或更改视图或其bounds change时,都会调用viewDidLayoutSubviews 。 此处的关键字是界限变化。 但是要知道,使用viewDidLayoutSubviews ,它仅在对视图应用了所有自动布局或自动调整大小的计算之后才会发生。 这意味着,每次视图大小更改并且重新计算视图布局时,都会调用viewDidLayoutSubviews方法。 每次构建应用程序时, viewDidLayoutSubviews都会在viewDidLoad之后发生,因为请记住, viewDidLayoutSubviews是在应用布局计算时发生的。 然后,当您旋转应用程序时, viewDidLayoutSubviews将再次发生,并且这仅适用于纵向到横向以及横向到纵向。 而不是从左景观到右景观。 您可以通过转到硬件>方向使用模拟器来玩它。 但是,让我们考虑一下。 真正的用途是什么? 下图说明了使用viewDidLayoutSubviews的区别和结果。 您可以通过不实现viewDidLayoutSubviews来尝试以下示例,并且可以看到如下所示的差异。 注意宽度的变化。 现在,我将通过几件事来说明该方法的过程。 […]

轻松注册和维护UITableViewCell

我同意,在大多数情况下,一种班轮代码并不适用,但是对于喜欢的班轮代码,这是其中一种。 因此,传统的方法是首先要求您创建UINib对象并加载它,然后在表视图中注册它。 简而言之 let nib = UINib(nibName:“ nameOfYourNibFile”,包:nil) tableView.register(注册:nib,forCellReuseIdentifier:“ yourIdentifier”) 现在,如果您有多种类型的细胞,它很容易长大。 您对此的看法: 没有更多的字符串操作和记忆笔尖的名称,也没有单元重用标识符。 另外,如果您添加任何新单元,则它们会自动注册。 所以,走吧… 您将需要创建一个简单的协议,使其符合CaseIterable (它是type,它提供了所有值的集合,有关它的更多信息),这使我们可以轻松访问allValues 。 我们的协议应包含AnyClass类型的简单属性(重新设置UITableViewCell或CollectionViewCell)。 总而言之 因此,让我们考虑一下您要加载多个单元格类型的主屏幕。 让我们创建符合先前创建的协议的枚举。 现在,最后一步是通过创建扩展来扩展UITableView的功能。 稍作修改的老派方式😊 没有看起来那么复杂。 我希望我能得到那些一线讨厌者。 如果喜欢的话,别忘了给掌声,会感激的。 快乐编码

可视化的快速访问控制

Swift是类似于我的第五十种编程语言的东西,而且我倾向于仅仅洗刷访问控制之类的东西,通常我会摆脱它。 我必须非常喜欢一种语言来关注访问控制的各个方面,这是值得的。 在两种情况下对于Swift都是如此。 真实的故事:我每年都会去巴塞尔艺术展。 在Swift的第一年,我正忙于坐在林肯路(Lincoln Road)上的星巴克(Starbucks),忙于通过Swift 1.2手册去参加艺术展或聚会。 无论如何:花一些额外的时间思考一下Swift中的每种访问控制情况是值得的,因为细微的差异和特殊的含义会惯常地出现。 (到底什么是公共私有集,为什么需要它?)。 我遵循了Swift手册来关联这些图。 如果您在手册中查找它们,则会以与Swift 4手册中相同的顺序在此处看到条目。 目的是帮助您可视化差异,而不是最终替代手册。 随时提出修改建议。 这是本周正在进行的工作,可能需要更长的时间。 在“ Public Private(set)”成语中需要更多信息。

具有XIB文件的自定义UIView

如上图所示,您可能遇到了一些示例。 我现在将向您展示如何实现这一目标。 这种方法非常易于使用,可以使您的代码保持整洁。 创建一个超级类 我们将创建一个名为NibView的超类,该类将处理有关XIB文件合并的所有内容。 创建超类的力量在于可重用性。 您可以使每个UIView从其父类继承。 import UIKit class NibView: UIView { var view: UIView! override init(frame: CGRect) { super.init(frame: frame) // Setup view from .xib file xibSetup() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) // Setup view from .xib file xibSetup() } } private extension NibView { func xibSetup() { backgroundColor = […]

Swift中的自动引用计数(ARC)

程序运行时,会分配有限数量的资源。 记忆是最重要的之一。 因此,这种类型的内存浪费会阻碍程序性能,甚至导致崩溃。 ARC为我们设置了打破这些周期的任务。 那么,我们如何才能打破这些循环? 好吧,这就是我下一篇文章的主题: 如何使用弱引用和无主引用来中断引用周期? 敬请关注… 如果您喜欢该帖子,请点击❤️按钮并进行宣传。 请在下面发表评论,以提供您的反馈并帮助我改善内容。

深度学习iOS 12和Swift 4的前五门课程

大家好, 你好吗? 一年中的那个时候(永远不会太晚),当我们所有人都开始为改善健康,改善自我和学习新事物制定目标时。 去年,我主要专注于Web开发方面,并花了一些时间学习React,Angular和Node JS,但是今年我的目标之一是探索移动世界,尤其是iOS和Android。 至少现在这是一个想法,我不确定在有限的时间内可以升级多长时间,但是我会尽力而为。 顺便说一句,如果您也有相同的目标并想成为一名iOS开发人员,那么您应该开始学习iOS 12,这是可以在iPhone和iPad上运行的Apple操作系统的最新版本以及Swift 4的Apple编程语言。创建iOS应用。 实现目标的重要一件事是制定计划并拥有实现目标的正确资源。 因此,我开始研究学习iOS 12的最佳方法,发现没有比参加优质在线课程更好的方法了。 我最初想到的是面对面的新兵训练营,但付出的成本和时间都很高,我不知道自己能做些什么。 在线课程解决了这两个问题,首先,它们比课堂培训或面对面的Bootcamp课堂价格实惠 (比较1000美元到10美元,是的,它们是如此便宜),其次, 没有时间投入。 您无需在任何特定时间去参加任何课程。 您可以随时学习。 如果您拥有智能手机和良好的互联网连接,您甚至可以在通勤时观看这些课程,这正是我的工作,对我来说真的很有效。 您还可以在舒适的办公室和家里学习,这就是为什么我认为在线课程是学习iOS 12或Swift 4以及任何新技术的最佳方式的原因。 但是,在线课程面临的最大挑战是选择正确的课程 。 互联网上充斥着免费和付费的在线课程,但并非所有课程的质量都很高。 如果您最终选择了中等水平的课程,那么您将浪费大量时间,有时甚至会感到无聊和沮丧。 因此,在本文中,我将分享一些最佳的在线课程,以学习iOS 12和Swift4。您可以选择其中的任何课程,我个人最喜欢的是iOS Bootcamp,以开始您的旅程。 前5名iOS 12和Swift 4在线课程 在分享在线课程以学习iOS 12和Swift 4之前,让我们先讨论一下iOS 12本身。 iOS 12是Apple开发的iOS移动操作系统的第十二个主要发行版,可在其iPad和iPhone上运行。 它是iOS 11的继任者,于2018年6月4日在该公司的全球开发者大会上宣布。 最棒的是,它附带了一些真正的前沿技术和API,可让您创建一些令人印象深刻且很棒的应用程序,例如Pokemon Go。 我正在谈论的技术包括Core ML 2和ARKit 2,Apple的机器学习和增强现实API。 选择详细解释这两个关键API的课程非常重要,特别是如果您想创建一个很棒的现代应用程序。 1. iOS 12和Swift-完整的iOS应用程序开发训练营 简而言之,这可能是世界上最好的iOS开发人员课程。 太好了,甚至激发了我去创建一门课程,这是另一个故事,但这是一门该死的好课程。 教练安琪拉(Angela Yu)非常有经验和热情。 她在Bootcamp上教授iOS开发,该课程是Botocamps的在线版本,价格在8000美元到12000美元之间。 […]