Tag: swift

自动更新

一个简单的面向协议的框架,用于编写易于更新的,数据驱动的视图。 通讯协定 我使用的协议叫做Unit因为我制作的游戏涉及战争内容。 模型协议 protocol Unit { var name: String { get set } var id: String { get } var status: UnitStatus { get set } } 我还需要能够等同于它们。 func ==(lhs: Unit?, rhs: Unit?) -> Bool { return (lhs?.id == rhs?.id) } 现在,我将创建一个简单的struct以符合我的Unit协议。 struct Hero: Unit { var id: String var name: String var status: […]

Swift Sprite Kit易于创建项目符号

如何轻松创建像图片一样的项目符号 创建SkSpriteNode var bullet = SKSpriteNode() 2.将SKSpriteNode添加到视图 func bulletFire(){ bullet = SKSpriteNode(color: UIColor.green, size: CGSize(width: 5, height: 50)) bullet.name = “fireBullet” addChild(bullet) bullet.zPosition = 2 let move = SKAction.moveTo(y: self.frame.height, duration: 1) bullet.run(move) } 3.在节点离开视图后设置删除节点 self.enumerateChildNodes(withName: “fireBullet”) { (node : SKNode, nil) in if node.position.y > self.frame.height / 2 { node.removeFromParent() } } 4.将节点添加到TouchesBegin override […]

面向工程师的场景套件和3D挑战

随着我们见面演讲的日子越来越近,Erica和我没有任何想法。 每个参加会议的团队都做得很好,这使我们没有太多可供选择的主题。 经过几天的压力之后,我们决定使用Scene Kit,因为没有其他团队在研究它。 这就是我们使用Scene Kit开始冒险的方式……… 我们要做的是在Scene Kit中创建一个场景,我们将拥有一个足球和一个守门员,投篮并让守门员接住球。 经过研究后,我们意识到还有一个大问题在我们的控制范围之外,那就是:找到可用的3D对象并为其设置动画。 有大量的网站可以找到免费模型。 您需要注意的一件事是文件类型。 XCode接受Collada文件,其文件扩展名为“ .dae”。 在下载了要使用的文件并将其添加到XCode项目之后,您可能会意识到该模型没有所需的旋转值,因此,例如,如果您的模型需要直立放置,当您将其添加到Xcode中时可能不会。 下面的示例是我添加到Xcode中的Ironman模型,看看它在Xcode中的外观,即使在实际文件中它看起来像是站立着的: 我们能够解决此类问题的方法是使用某些设计软件。 我们下载了Maya和Blender。 在Maya的帮助下,我们能够修复模型并将其添加到我们的Xcode项目中。 因此,重要的是要了解一个Scene Kit项目至少要有两个主要的团队在工作:设计团队(负责处理这些模型和动画对象)和工程团队(负责处理事物的编码方面) 。 就我们而言,我们试图做到两者兼而有之。 添加模型后,剩下的就是Scene Kit和iOS。 这不是Scene Kit项目教程,因此我将不进行详细介绍,但此处是其摘要: 在Scene Kit中,几乎所有东西都是一个节点。 物体,地板,灯光和照相机。 有一个根节点,它是不可见的,其他所有节点都是其子节点。 每个节点都有其父节点和子节点。 每个节点都可以具有其材质(主要是纹理及其颜色/图像),物理,几何,灯光,摄影机,位置,旋转,动作以及更多其他属性。 首先,将节点添加到根节点,并使用灯光,摄像机和所有荣耀设置场景! PS:如果您可能想知道:是的,我们完成了小场景并成功展示了! 我希望这可以帮助别人!

在Xcode中查找泄漏

Swift和Objective C都使用自动引用计数(ARC)来跟踪何时需要将对象保留在内存中以及何时可以安全地释放该对象。 内存泄漏是在创建对象并将其保留在内存中后,不再属于任何事物,并且永远无法释放。 通常,这是一种循环依赖关系,其中对象A拥有对象B,而对象B拥有对象A。它们彼此都将保留在内存中,因为它们彼此都是必需的。 所谓“拥有者”,是指“拥有强烈的参照权”。 泄漏通常在委托模式中看到。 委托引用应始终声明为weak引用,因为弱引用将允许运行时释放内存。 考虑到父母/孩子的关系,父母应该对孩子有strong的指称,但是孩子应该对父母有weak的指称。 在Swift中,默认情况下引用strong 。 另一个常见的泄漏地方是在密封盖内。 在闭包中使用的所有变量(包括self)都将被强烈捕获,以确保在闭包执行时它们仍然存在。 为了避免此处的保留周期,请使用捕获列表告诉闭包保留弱引用。 请注意,这不必适用于所有闭包,仅适用于@escaping那些,这意味着它们将被存储以供以后执行。 John Sundell对此发表了一篇出色的文章,即在Swift闭包中捕获对象。 例如: object.run {res-> Void in self.result = res } 会泄漏self 。 通过在捕获列表中适当的weak或unowned来解决此问题: object.run {[弱自我] res->无效 self?.result = res } 这种基本的方法涉及日志记录。 首先在要检查的类的init方法中放置一个打印语句。 我喜欢使用表情符号,以便在控制台中轻松查看。 在里面() { 打印(“✅初始化我的班级”)… } 并将另一个打印语句放在deinit方法中。 deinit { print(“❌取消我的课程”) } 现在运行该应用程序,并使用分配该类的功能,然后完成它,以便释放该类(例如,提供一个视图控制器,然后将其关闭)。 您应该看到平衡数量的日志,例如,每个init一个deinit 。 如果没有看到deinit日志,则可能是您的对象泄漏了。 您可以使用断点代替日志,并且对于奖励点,在发生重新分配时会播放“ pop”声。 在模拟器中调试时,这是Xcode中可用的运行时工具。 首先,请编辑方案并启用Malloc […]

处理应用程序生命周期

嗨,我的IOS开发人员。 在这里,我将向您展示当应用程序从前台转到后台时,如何遮罩View(应用程序的当前屏幕)。 当回到前台时,您将看到实际视图。 在印度,当Paytm应用从背景和前景过渡时,您可以在Paytm应用中看到这种生命周期处理。 在Project App委托类中,我获取了带图像的imageView。 然后,在application(didFinishLaunchOptions)中添加了观察者。 因此,每当应用转换时,就会调用这些观察者,依此类推 取决于那些选择器,imageview将被添加到窗口根viewcontroller的视图中,并将被从超级视图中删除。 4.最后,我从applicationWillTerminate()方法中删除了观察者。 相当容易! 对??? 如果您知道任何更好的方法,请让我知道如何处理这种功能。 谢谢!! 如果您喜欢我的教程,请在媒体上关注我。 您可以通过我的推特或linkedIn帐户与我联系。 谢谢阅读。 很快就会有更多教程变得更好。 再见!!!

斯威夫特-好

今天早上,我得到了“ Tuomas Artman” Talk的链接,他是Uber的架构和框架技术负责人。 在观看Talk时,我发现了一个有趣的话题,即“什么使’Swift’变得更好?” 是的,现在你们知道我在哪里找到Title了。 谢谢,Tuomas Artman and Talk非常有帮助,请不要错过观看… 斯威夫特与一百名工程师 Tuomas Artman分享了优步重写的优缺点这是Tuomas Artman的演讲,在… www.skilled.io上发表 这只是一种更好的语言。 让我们找出为什么更好的语言。 我找到了一堆关键字,让我们一个个开始,看看有什么特别的……

带角半径的UIView阴影

大家好, 感谢您将宝贵的时间花在我的教程故事上。 我将在2019年提出更多更好的方案。我希望您和所有人的成功。 一个自定义IBDesignable类,用于渲染阴影和角半径: 阴影始终需要附加或绑定到视图的边界。 更改拐角半径时,阴影也应正确应用于那些蒙版的拐角。 为此,我们在带有视图边界的Rect中创建一个shadowPath,并将设置视图层上所有必需的属性以及所需的拐角半径值。 例子:- 注意:要为视图蒙版特定的角,我们可以在视图的图层上使用maskedCorners属性传递所需的角以及图层上的角半径。 view.layer.maskedCorners = [.layerMinXMinYCorner,.layerMaxXMinYCorner] — — — — — — — — — — ************************** — — — — — — — — — 您可以在推特和链接上与我联系/关注我 帐户。 谢谢阅读… ****************************!!!再见!!!************** **************

[Swift 4]排名前三的String API新功能

在每个版本中,Apple都使我们越来越爱Swift。 但是,并非总是那样。 就我个人而言,Swift 3感觉是Swift的第一个正式版本,而不是版本1和2。他们感觉更像是该语言的beta发行版。 现在我们得到了Swift 4,它是Swift 3的升级,而不是像以前版本中那样对语言进行全面的改进。 它随新的Xcode 9一起提供。在使用Swift 4之后,我决定专门讲一个故事,重点放在令人兴奋的新String API上 。 关于Swift 4 Swift 4以Swift 3的优势为基础,提供了更高的鲁棒性和稳定性,提供了与Swift 3的源代码兼容性,对标准库进行了改进,并添加了诸如智能键路径和序列化之类的功能,同时缩短了构建时间并减小了尺寸应用程序二进制文件。 为您推荐: 我❤Swift [第1部分] — UIViewController和扩展 字符串API 字符串是Swift中最常用的类之一,因此最终,它得到了很多当之无愧的爱。 新的API包含许多更改,但我将仅关注最佳更改。 3个多行字符串文字会让您忘记在行中添加带有内联\ n的新行 较长的字符串,会使您的字符串显得肮脏且难以阅读。 这是多行字符串文字可能有帮助的众多示例之一。 通过将示例字符串添加到print()中,让我们比较当前和新的字符串多行方法。 迅捷3 print(“ \ n示例:\ n-第一行\ n-第二行\ n-第三行”) 斯威夫特4 print(“”“示例: – 第一行 – 第二行 -第三行“”“) 可能您会发现差异以及新的多行字符串的清洁程度。 为了使用多行字符串文字,您将需要使用“”“确定字符串的基本缩进。 2个集合–字符串再次成为集合。 它是在Swift 1中首先引入的,但在Swift 2中却被删除。现在,该字符串被视为字符的集合,我们可以对它们执行各种操作(迭代,过滤器等)。 直接在String上迭代 let str =“超赞的字符串” […]

Xcode专家提示:JSON格式

如果您在源文件中具有JSON结构,则可能会得到如下所示的内容: 粘贴和保留格式。 使用保留的格式,我们得到: 如果您像我一样,并且倾向于将头撞在墙上,那么您只会默默地哭泣,浪费宝贵的时间来缩进混杂的JSON。 *我不够聪明,无法独自解决这个问题,一位心爱的同事与我分享了这个秘诀。

使用Swift编程启动和运行

带有可选,函数和字符串的Swift简介 在本文中,您将学习Swift的以下基本知识: 可选,可选绑定,强制展开 2.功能 3.创建数组 4.创建字典,迭代操作 5.字符串运算 6.条件语句,Switch语句,if语句 介绍Swift Swift是Apple开发的新编程语言。 如果您是一名Objective-C程序员,Swift将使您感到熟悉。 它遵循与Objective-C相同的方法名称和参数。 它还包括来自Objective-C的可可框架。 此外,Swift代码可以与Objective-C代码一起使用。 Swift代码更加简洁,执行速度更快且易于调试。 自从Swift引入以来,人们一直在谈论它,并且大多数人发现它易于适应并且更具表达力。 即使是具有数十年经验的Objective-C开发人员,也会发现它简单而直观。 它是如此简单却强大,以至于一段时间后您会感觉到它是第二自然。 Swift简洁,直观且执行速度更快。 最重要的是,它已被广泛采用,github上有成千上万个存储库,您可以在堆栈溢出时找到大多数问题的解决方案。 在进行快速编程之前,我希望您了解Apple引入的一种伟大工具,该工具仅用于学习和尝试这种新语言。 它被称为游乐场。 太好了,您不必担心创建项目或构建项目来编译代码了。 您可以直接尝试使用快速代码并立即查看结果。 这使学习体验更加有趣。 因此,我建议您使用Playground立即尝试和调整代码。 在学习概念的同时尝试自己编写代码是学习编程时最重要的事情。 正是这样才能保持创造力,创新和即兴创作的乐趣。 您不必单独下载或安装它。 您只需要Xcode。 安装Xcode并将其打开后,您将看到以下窗口 要创建一个Playground文件,请选择第一个选项,即Play入门。 您将被带到此窗口: 您可以在这里命名您的Playground文件,并选择iOS或OS X的平台。单击下一步时,系统将要求您选择Mac上的位置以保存项目。 根据您的方便选择,然后单击完成。 现在,您的Playground文件已准备就绪,可以进行编码了。 您将看到以下窗口: 这是一个普通的游乐场文件。 与您的Xcode项目中的类相似。 在左侧,您将看到一个包含字符串“ Hello,Playground”的变量。 在右侧,您会在该行上看到结果或变量的值。 您可以在运行时立即查看任何计算和运算的结果,如下图所示:- 那么,为什么还要浪费时间呢? 让代码! 因此,让我们从基础知识开始: 变数 快速创建变量 在这里,我们定义了一个变量“ myName”,使用var关键字,变量名和冒号“:”来完成此操作。 冒号后面是数据类型,在这种情况下,数据类型是String ( String是Swift引入的新数据类型)。 我们为该变量分配一个字符串值“ […]