Tag: 编码

工业视图:矢量化视图

今天的iOS建筑工人食谱:如何使用通过PaintCode创建的自定义UIView在iOS项目中“矢量化”一个以太坊图标文件。 在适当的情况下使用,在代码中绘画一些图标将使该项目更加敏捷,更加幸福,并与世界全面实现精神和情感上的和平。 问题 在日常的工业iOS工作中,开发人员会为iOS应用遇到很多图像。 通常这些文件打包为PNG或JPG文件,因此随着时间的推移,该项目最终会产生数十个图像文件。 有时,您的设计师会要求您对图标进行颜色或大小上的细微调整,而来回剥离图像文件可能会很累。 尽管有很多出色的工具(Zeplin,Sketch等),但手动将图像文件一次又一次地添加到Xcode中并造成潜在的合并冲突总是很麻烦的。 解 使用PaintCode创建自定义UIView,它将始终绘制您需要的所有变体,所有A / B测试组合。 是的 图标最适合绘图吗? 我上线了,从jax gotham找到了一组50个以太坊图标,可以在SVG中使用,并且是开源的……谢谢Jax! 通常,当图标没有太多点并且很容易调整大小时,它们非常适合这种矢量化的UIView。 只需将ethereum-coin3.svg拖到PaintCode中,它就会在下面的代码翻译中显示,非常好! 正如Caroline Begbie所指出的那样,PaintCode还是学习iOS(和其他平台)上Core Graphics和UIKit上绘图的一种好方法。 我对这些层进行了分组和调整,以便以后可以在代码中对其进行自定义。 自定义颜色,然后将它们分配给特定的组以供以后自定义也是一个好主意。 调整大小限制功能是PaintCode最好的功能之一。 您只需要对元素进行分组,然后将它们放置在框架下-这将使图标随框架正确调整大小。 您可以从PaintCode的代码菜单中复制和调整代码,也可以将其导出为StyleKit:此StyleKit可以包含多个图标和自定义颜色的绘图代码。 一旦在Xcode中提供了CryptoCoin样式包,就可以很容易地对代码进行调整,以执行基本的工作,例如为每个组设置颜色(完整代码): 公共 类 CryptoCoin:NSObject { @objc 动态 公共 类 func drawEthereumcoin3(frame:CGRect = CGRect(x:0,y:0,宽度:1024,高度:1024), coinColor:UIColor = .white, outlineColor:UIColor = .black, logoColor:UIColor = .black, gleamColor:UIColor = .black){ /// 以太坊硬币视图 这是日常使用的原始模板,以及用于日常情况的默认初始化器。 就是这样! 现在,您已经有了一个不错的UIView类,可以随时用于工业化日常使用: […]

实时编码的艺术

人们经常将实时编码与灾难的后果联系起来。 出于这种信念,大多数演示者在演示过程中都远离现场编码,而倾向于幻灯片,因此很安全。 我从事演示文稿的现场编码已有十多年了。 我几乎所有的演讲都是现场编码会议。 实时编码确实需要一定的勇气和信心,但是如果执行得当,它可以创造奇迹。 在这篇文章中,我将讨论我在现场编码演示中学到的课程。 实践 这毋庸置疑,多练习,多练习。 实践是完美的,良好的实践无可替代。 您应该确切地知道您要演示的内容以及演示流程将如何展开。 即使您是该技术领域的专家,也请确保您练习演示文稿。 后备 备份正在运行的代码总是一个好主意。 希望您的现场演示会顺利进行,但是如果您忘记了某些内容,则始终可以查阅备用代码。 少量代码 这是一个出色的实时编码演示的本质。 没有人正在参加您的演讲以看到您输入文字。 确保键入少量代码以产生输出。 理想情况下,您只需输入4-5行代码就能展示演示的一部分或一部分。 卡住,继续前进 如果卡在无法正常工作的代码上,请查阅备份。 如果您无法在10秒内使用备份修复它,请继续。 不要站在观众面前尝试解决问题。 您尝试解决问题的每一秒钟对您的听众来说都是永恒的。 不接受请求 我不确定这在世界其他地区有多普遍,但是在休斯敦这很普遍。 有时,您会在谈话中遇到一个人,他会在您进行实时编码时不断要求您添加功能。 与这些人打交道的最好方法是,简单地告诉他们在谈话后即可使用该代码,并且他们可以自由地自己添加功能以作为练习。 以后的问题 有时,您有很多演示要演示,而您根本无力回答演示过程中的所有问题。 在这种情况下,最好在演讲开始前告诉听众成员您将在提问的最后,甚至在会议结束后都可以帮助您。 为世界末日做好准备 如果您的演示需要互联网连接才能正常工作,请确保您有某种备份,以防没有互联网连接。 通常,最好录制一小段正在运行的演示的视频,以防SkyNet破坏整个互联网。 在会话/演示期间进行实时编码并不容易。 这是没有多少人这样做的主要原因。 成功的现场编码会议需要特殊的技能,信心和勇气。 最后,我认为实时编码是一门需要大量实践才能发展的艺术。 您是否在演示文稿中使用代码? 我很想听听您的提示!

Swift解决方案:Flyweight模式

Swift Solutions是涵盖设计模式的一系列文章。 在每篇文章中,我们讨论该模式是什么,何时应用以及如何以Swifty方式实现它。 飞量模式是一种节省内存的模式,当有许多要实例化的对象共享相似性时使用。 在本文中,我们将说明并编写Swift中的flyweight模式。 阅读本文之后,您将知道在必须创建大量相关对象时如何节省内存。 插图 首先,让我们使用文本编辑器的经典示例。 文本编辑器实例化并重复使用所有26个字母。 例如,当键入“ HELLO WORLD”时,我们将在三个不同的时间重新创建“ L”字符。 这很浪费,因为我们创建了三个字符对象来表示相同的字母。 flyweight模式的目标是共享可重用的对象,而不是不必要地复制它们,从而使我们的文本编辑器轻巧。 我们通过首先将对象分为两部分来重用对象:外部状态和内部状态。 外在的是指对象的根据上下文而改变的部分,因此无法共享。 例如,一个字符可能被加粗,着色或具有较大的字体大小。 这类数据不可重用,因为我们不希望给定字符的所有实例都共享这些属性。 另一方面,固有数据表示跨字符保持相同的内容。 固有数据的一个示例是给定字符的形状。 所有重复的字符都是渲染的形状,并且该形状不会从一次出现更改为下一次出现。 每当角色出现在我们的整个作品中时,我们都可以使用相同的“ L”形,然后对其应用外在属性。 总结一下: 内部数据是不可变的,相同的,没有上下文的,因此可以重用。 外在数据是可变的和上下文的,因此,并非在所有情况下都可以重用。 通过分离内部数据和外部数据,我们能够确定我们可以在对象中重用的内容。 考虑到这一点,让我们跳入代码示例。 实作 我们将在我们的代码中模拟一支装满步兵的军队。 我们还可以有弓箭手,将军和许多其他类型的士兵,并且我们想尽可能地重复使用,因为这些士兵实体中的每一个都会大量存在。 protocol Soldier { func render(from location: CGPoint, to newLocation: CGPoint) } 首先,我们创建一个Soldier协议,该协议具有将士兵在网格上的原始位置以及士兵将要移动到的新位置的功能。 我们代码的目标是随着战斗的进行在网格上绘制步兵部队。 由于每个士兵都有一个唯一的位置,因此位置被认为是外部状态。 Flyweight对象不会存储位置,但是它们仍需要通过其功能输入来处理外部数据。 不久之后会更多。 飞行重量 让我们看看Flyweight对象的外观: class Infantry: Soldier { private […]

Swift 4.2中的网络

介绍 好吧,这里通常会花很多时间谈论移动应用程序中网络层的重要性,每个人都知道! 因此,让我们谈谈更重要的事情,如何以可重复使用的方式组织这些事情,而无需一次又一次地重新实现它。 让我们保持简短,着手做生意。 在本教程中,我将分享在POP方法中结合使用可编码的 泛型的经验。 我们将在这里做什么 首先:我们将创建一个请求类型 然后:我们将处理错误类型 下一步:我们将实现一种执行方法并以通用方式映射它 让我们不要忘记整理结果 最后:我们使用请求者类型执行它 请求类型 该对象将封装HTTP调用详细信息: 。 标头 :是HTTP请求和响应的组成部分,通常包含令牌,登录详细信息… 。 参数 :这些是HTTP调用的查询详细信息,将以“ http://……?key = value&key = value”的形式显示 。 BodyParameters:将保存将发送到后端的所有数据。 。 HTTPMethod :GET,POST,PUT … 让我们从编写一些代码开始! 首先,最简单的事情是定义HTTP方法。 现在我们有了方法,我们将为params,header和bodyParams创建typealias。 然后: –我们将创建我们的请求协议 –我们将使用协议扩展为其添加默认行为 –最后,我们创建实现该协议的HTTPRequest结构 繁荣! 而已。 错误类型 这种类型将组织我们层中的错误! 为了更好地处理它。 我们有不同类型的错误: 。 网址错误:网址无效时。 。 数据错误:数据为零时。 。 mappingError:将数据映射到可编码对象失败。 响应错误:当我们在执行请求时收到错误时,我们将为此使用泛型,并在枚举的情况下传递错误值,这是很酷的事情! 让我们开始吧! 一块蛋糕! 错误类型使用通用类型E,以后将是快速错误类型。 结果类型 […]

代码挑战:在Swift中遍历数据结构

最近,我有机会帮助iOS面试计划的学生为大多数人认可的公司准备了一次重要的技术面试。 总体而言, 我的课程融合了代码挑战和实时白板会话的组合,测试了人们在Swift中实现语法,设计模式和算法的能力。 挑战 有时,我会听到人们回覆他们的采访经历。 有时,某些类型的问题会使开发人员感到惊讶。 如果您意识到了挑战,那就太好了! 对于我们其他人,这里是摘要: //给出以下树: // 1 // 2 3 // 4 5 7 // 8 9 //由此类实现: 类 基站 { var键:T? 左变数: 基站 ? 右: 基站 ? var高度: 整数 在里面() { 自。 高度 = -1 } } //使用以下函数获取以下输出: //预期输出: // 1 // 2 3 // 4 5 7 // 8 […]

如何寻求帮助(编码)

由于多年来我一直将自己视为新手开发人员,因此现在已经很熟悉了。 我有一点时间,我只是打开笔记本电脑,在个人学习项目上进行一些工作,也许要完成一个教程,然后:pwhoomp! 包版广告。 在一个小时内,发现两个错误使我无法通过初学者级iPhone应用程序编程教程的初始阶段,有人向我指出,编写其他过程可能对其他人有用。 开始。 首先,我分享一些背景知识,以防您可能希望学习类似的技能,或者在开发学习过程中觉得自己一个人,也许我们有一些共同点。 我是50岁的兼职产品经理,他了解vi和HTML,一些CSS,一些JavaScript。 从牛顿时代开始,我就一直崇拜苹果移动产品。 掌上功能强大的计算机? 对于在Littles上长大的人,您betcha! 这些天,我正在学习Swift,以开发自己的教育应用程序。 (我也教。)我的自学课程结合了Apple的App开发和Swift iBook以及Paul Hudson的Hacking with Swift教程。 昨晚,我正在学习第五个教程,很高兴学习如何构建文字游戏,这是一个具有明显现实世界教育价值的项目。 只是完成设置,在Apple的Xcode IDE中创建新项目,然后从默认视图切换到UITableView感觉就像是一项成就。 下一步是在ViewController.swift中添加一些行以读取文件,并将视图标题(在手机屏幕上看到的内容)设置为以下单词之一。 表面上看,这比听起来容易得多,因为提供了所有代码。 如果您愿意,可以只复制粘贴。 因为学习起来感觉更好,所以我会尝试通读,理解,重新键入和搜索Google。 当然,语法错误会逐渐蔓延,但是Xcode会警告我这些错误。 完成输入要读取文件的功能后,并设置了初始表格视图,该教程指示:“现在按Cmd + R键运行该应用程序,您应该在顶部看到一个八个字母的单词,准备就绪太好了,我喜欢构建和运行部分,我计算机屏幕上的假装电话,一点点的工作软件。 除了… 没啥事儿。 更具体地说(因为这实际上是我在其他人的问题报告中想要理解的东西),模拟器确实显示了所请求的假装设备(我将我的设备设置为iPhone 5s,因为它非常适合我的MacBook Air屏幕),但是我既没有看到表格视图,也没有看到标题。 最初我不知道为什么。 说实话,在这里。 每当我遇到这些时刻之一时,我都会感到恐慌。 我有一个相当消极的内部独白,像这样。 “来吧,您永远不会成为一名开发人员。 您应该做其他事情。 我一直压扁这个,但我听到了。 我认为很多学习者都这样做。 我知道我需要寻求帮助。 不要害怕问,但请仔细考虑您的要求。 当我们处于编码障碍时,这意味着我们的软件无法按预期运行。 暂停。 深呼吸。 您可以对此进行推理。 您期望发生什么? 发生了什么事呢? 在这种情况下,本教程包括一个屏幕截图,因此我确切地知道应该看到的内容:带有标题的UITableView。 表格视图和标题均丢失。 除了空白的模拟器屏幕外,Xcode还在ViewController.swift中标记了这一行: 标题= allWords [0] 我还在调试控制台中看到“严重错误:索引超出范围”。 […]

使用Swift了解哈希表,字典和集合

在帮助iOS开发人员准备技术面试时,我经常讨论哈希表。 由于效率高,哈希表是候选人在应对编码挑战以及实际应用程序时应考虑的出色工具。 在本文中,我们将探讨哈希表的概念,并将其与其他集合类型(例如字典和集合)进行比较。 词典 要了解为什么哈希表很有用,应该熟悉它们的设计。 当被问到时,许多学生都认为“哈希表就是字典”。为验证这一点,让我们回顾一下标准的Swift字典类型: 变种 清单= 字典 ()//添加字典值-恒定时间O(1) list [“ WB”] =“ Wayne Bishop” list [“ FB”] =“弗兰克·霍布斯” list [“ LP”] =“拉里·佩奇(Larry Page) list [“ AE”] =“阿尔伯特·爱因斯坦” //检索密钥 对于 s在list.keys { 打印 (秒) } //获取值 对于 v在list.values { 打印 (v) } //通过键获取值-恒定时间O(1) 让 item = list [“ WB”] //收回“ Wayne Bishop” 词典是处理许多情况的有用类型。 由于键和值都是在运行时提供的,因此可以编写例程来检索单个键,值或它们的混合。 […]

小Xcode Beta带来的惊喜🎁:核心图形可编码一致性

⭐️⭐️⭐️️⭐️⭐ 嗨! 此帖已移至新博客! 来到Fivestars.blog以获得最新文章! ⭐️⭐️⭐️️⭐️⭐ 如果您早在Xcode 9 Beta 1之前就直接Codable Swift 4的Codable协议,同时启动了一个最新的Beta(3或更高版本),您可能会看到类似以下的警告: 核心图形框架不像Swift一样不是开源的,因此这不是我们可以预见的。 不过,这是个好消息! 事实证明,每一个CoreGraphics Geometric Data Type现在都符合Codable ,即: CGFloat CGPoint CGSize CGRect CGVector CGAffineTransform 太棒了! 我们如何利用这一优势? 如果我们将CGPoints / CGSizes / etc存储在某个地方,则现在必须确保以与新的Codable一致性期望的相同方式进行存储。 让我们看看如何! 尝试1:源代码 最简单的方法是查看源代码,例如,如果转到CGPoint定义,则将看到以下内容: 同样,Core Graphics Framework不是开源的,因此我们只能看到公共函数的标头和定义。 这不会帮助我们了解事物在幕后的工作方式,让我们尝试另一种方式… 尝试2:Apple的文档 我的第二个最佳猜测是Apple的文档,这令人失望: 尝试3:艰难的道路(游乐场!) 厌倦了猜测揭开谜团的新方法,我决定以简单的方式做事。 我开了一个新操场,开始编码: 所以你有它! 🎉🎉🎉 快速回顾一下,这是存储/读取数据的方式(如上面的Playground所示): CGFloat 只需要一个数字,带可选的小数点. 从小数部分中拆分整数部分(如果有小数部分) CGPoint 期望包含两个CGFloat的数组,第一个表示x ,第二个表示y CGSize 期望包含两个CGFloat的数组,第一个表示width ,第二个表示height […]

如何准备在Facebook进行技术面试

自启动iOS面试计划以来,我有机会与许多有兴趣在Facebook工作的学生一起工作。 结果,我对他们的招聘过程产生了浓厚的兴趣。 与Google和Amazon类似,他们的采访“循环”以其冗长而详尽的经历而闻名。 我最近访问了他们在西雅图的新办公室,就他们如何建议候选人准备技术面试进行非正式讨论。 本文提供提示,注释和建议。 行为要点 参加Facebook的采访活动时,我的目标是掌握最新技术,并在指导他人时微调我的方法。 我很高兴学习他们的过程从三个方面进行评分。 行为阶段旨在了解候选人。 这包括优点,缺点和目标。 突出的是他们强调寻找能够证明自己如何从失败的项目或处于危险中的项目中恢复过来的人。 这些事件揭示了候选人的态度,行为和外貌,而不仅仅是提供标准的样板反应。 Facebook寻求能够表现出流行的快速失败心态并且不怕冒险的人。 最佳脚步向前 重点是看到他们的技术面试过程的现场演示,演示者/开发者在100多人的观众面前白板解决方案。 在Facebook实际的5到6个小时的采访中,大约一半的时间将花费在完成编码挑战上。 结果,强调了候选人利用时间发挥自己的最大作用。 挑战 在Facebook上,给候选人约45分钟的时间来解决每个编码问题。 考虑到时间限制,他们建议通过提出正确的问题来给人留下深刻的印象,然后在优化设计之前继续实施蛮力方法。 只要您能够详细说明它们的性能,就可以接受使用特定API或语言功能解决挑战的方法。 为了说明这一点,让我们重新讨论在创建算法以检测字符串中的唯一字符方面的代码挑战。 签名如下: //挑战:编写一个函数来确定输入的String(例如元素)是否包含所有唯一字符。 功能 isStringUnique (元素: 串 )-> 布尔 { //代码在这里。 } 与大多数代码一样,有许多可能的方法。 在本文中,我回顾了如何通过应用蛮力方法解决该问题,然后继续优化代码,使其在线性时间(O(n)或更佳)下运行。 没有讨论的是纯粹使用本机Swift API或语言功能来解决它​​。 有趣的是,这种看似简洁的解决方案也满足了我们的要求: 功能 isStringUnique (_ s: 串 )-> 布尔 { 返回s.count == 组 (s).count } 乍看之下,代码看起来很棒,但确实是最佳答案吗? 更重要的是,考虑到典型面试的压力,人们是否有能力证明或否认其效率? 现在的课程是-较少关注语法,而是通过证明您的方法来努力展示您的知识。 系统设计 […]

了解Swift闭包语法

尽管我鼓励开发人员为技术面试做准备,主要侧重于解决问题的方法 ,但关闭过程非常复杂,需要仔细研究。 在这个挑战中,我们的目标是创建一个名为operation()的辅助函数,该函数将把times()函数用作参数 。 如下所示,times是一个简单的函数,它返回两个输入参数的乘积: //挑战:编写一个名为operation()的新函数,该函数将times()函数用作参数。 功能 次(lhs: 整数 ,rhs: 整数 )-> 整数 { 返回lhs * rhs } 一流 成功解决此挑战需要了解Swift语法。 首先,我们应该认识到特定对象(例如枚举 , 协议和功能 )通常是与其他语言一起使用时受到限制的,它们是一等公民 在Swift中。 因此,Swift允许我们像使用标准Int或String类型一样使用它们。 由于函数可以包含参数和返回类型,因此这使得将它们表示为Closures较为详细。 考虑以下: 功能 次(lhs: 整数 ,rhs: 整数 )-> 整数 { 返回lhs * rhs } 功能 操作 (公式:( 整数 , 整数 )-> 整数 ){ 让 结果=公式(2,3) print(result)//打印6 } //时间用作参数。 操作(公式: […]