Tag: 保留某些权利

开始进行Swift编程第16部分-inout,Lazy,Getters和Setters

之前,我们介绍了使用泛型和枚举进行闭包。 开始进行Swift编程第15部分-具有泛型和闭包的枚举 在上一篇文章中,我们讨论了错误处理。 medium.com 在本课程中,我们将逐步摆脱所有这些问题,并讨论一些可使您的代码更有效率的事情。 进出 inout是将参数传递给函数时使用的关键字。 当我们想要将变量传递给函数并修改该变量的值而不创建新变量时,使用inout 。 让我们看一下如何使用inout和不使用inout修改值。 懒 创建类时,几乎总是创建该类使用的属性。 这些属性可能只是我们打开或关闭以确定类的当前状态的标志,或者它们可能是更大的对象,例如新类用来执行某些操作的另一个类。 让我们看一个例子,我保证它是相关的。 吸气剂和二传手 获取器和设置器是计算属性的一部分。 他们是与属性观察者didSet和willSet 。 您可能还记得,当计算属性即将更改或已更改时, didSet和willSet在那里执行额外的任务。 获取器和设置器为我们提供了可用于设置值或检索值的逻辑。 这是一个例子

Swift编程入门第2部分—值类型,引用类型,指针和集合类型

之前,我们讨论过变量,常量和类型。 开始Swift编程第1部分-变量,常量和类型 我知道那里有很多教程,Apple有很好的学习Swift的资源,包括他们的WWDC视频…… medium.com 在这一部分中,我们将讨论几个特殊类型,但是为了深入实现这一点,我们必须首先讨论值类型,引用类型和指针。 提醒一句,指针可能是最难掌握的概念之一,我会尽力而为。 初步的东西 是的,我们上次这样做,现在我们将再次进行。 上一次我们讨论了内存以及它如何以块,字节和位的形式排列。 我想在这里对此进行扩展,并为您提供一些有关内存工作原理的直观表示。 让我们创建一个包含值Hello的字符串。 我们之前没有做过什么特别的事情。 我在上一篇文章中告诉您,内存具有价值。 如果我们可以看一下该内存,它将像这样存储: 我敢打赌,您要问的是\0在字符串的末尾。 这称为空终止符。 斜线表示程序已准备好执行命令,零表示没有任何意义。 这是字符串值的存储方式,并在字符串允许使用空格的同时让程序知道字符串何时完成。 数字略有不同。 数字存储为二进制数字。 二进制很容易理解,从内存块最右边的1开始,向左移动,每次将当前值乘以2。 如果您对图形卡或记忆棒有所了解,这就是为什么我们会看到8位(Atari,NES),16位(Sega Genesis,SNES),32位(PlayStation),64位(Nintendo 64)和以此类推。 在二进制中,如果位置为0,则表示关闭,这是错误的。 如果位置为1,则为开或为true。 基于此逻辑,我们只需要计算位置为1的位置即可。 您能找出上图中的数字吗? 现在,这是一组8位内存,是的,它是一个完整的内存字节。 之前我说过字符串中的每个字符都是2个字节,这意味着我们使用16位来存储字符。 16位二进制文​​件的最大值为256。但是,当我们谈论位置时,我们总是从0开始。因此16位二进制数的范围是0-255 。 我敢打赌,您在问我们如何才能使字符超出此范围。 好吧,在这种情况下,我将带您到ASCII表,您可以在其中查看自己的值。 您甚至还会看到隐藏的字符,例如空终止符/0如上所示。 内存将值存储在静态内存中,该位置称为stack ,而该位置称为堆。 可以快速访问静态内存和堆栈内存,但是从堆访问内容的速度很慢(以计算机时间计)。 尽管对您来说似乎并不慢,但从堆栈加载可能要花费一毫秒或更短的时间,而从堆加载可能要花费10毫秒。 在介绍事物时,我将解释它们的实现位置,以便您以后知道将其放置在何处。 值类型 值类型很容易学习,这就是我们自然地思考事物的方式。 当您描述某些事物时,例如说一个高尔夫球,您可能会说一个高尔夫球很小,或者一个篮球是橙色。 值类型是包含您要查找的值的内存。 如果您将值8存储在内存中,然后再要求输入该值,则会收到数字8,非常简单,对吧? 字符串,整数,双精度型,浮点型和布尔型都是值类型,还有更多,但是我们还没有涉及它们,到目前为止,我所有的例子都是值类型。 值类型存储在堆栈中。 如果在它们前面添加静态元素,那么它们会添加到静态内存中,而不仅仅是在各处都这样做,这会带来另一个问题,我将在后面讨论。 参考类型和指针 引用类型在某种程度上类似于值类型,因为它们可以为您提供与值类型相同的值,但它们可以为您提供更多的价值。 引用类型使用指针为您提供所需的值。 之所以要准备这么长的篇幅,主要是因为本节有保证。 如果您看一下C和Objective-C程序,您会发现到处都使用了指针,看起来像这样 集合类型 继续本部分的最后一部分。 […]

Xcode 7中的堆叠vs多行标签

大家好 一年前,我在一些教程的帮助下开始了我的第一个Xcode项目。 最近,通过一些断断续续的编码,我开始使用约束和堆栈视图。 堆栈视图 Apple在WWDC 2015上介绍了堆栈视图。使用堆栈视图和约束,您几乎可以为所需的任何Apple iDevice设置自动布局。 它能做什么 堆叠视图可水平或垂直堆叠多个级别。 单独的堆栈视图不会有多大帮助,您仍然需要固定或对齐按钮,图像或标签。 在Xcode 7之前,界面构建器中唯一的约束选项是align和pin按钮。 借助堆栈视图,您可以设置复杂的多设备布局。 对于非开发人员来说(乍一看)可能会让人感到困惑,但是它实际上很酷。 示例:复古计算器应用 为了获得一个想法,这是我正在为devslopes(https://www.devslopes.com)在线课程开发的复古计算器的示例。 我要做的是:垂直堆叠行(例如7,8和9),然后水平堆叠所有行。 有一些后续工作需要对整个堆栈进行对齐,以使其在应用程序中居中。 但是您会看到它如何在每个界面上居中。 当然,我本可以修复iPad上丢失的空间,但是此示例只是为了说明我的观点。 不要堆叠多行标签 现在在上面的示例中,您看到一个只有1行的简单标签。 您可以轻松地将其堆叠,不会引起任何问题。 但是后来我在多行标签上进行堆栈视图练习,然后尝试将其水平堆叠到其他堆栈。 这是示例应用程序的屏幕,在堆叠之前有一些按钮和多行标签: 堆叠后是同一个屏幕: 您会看到我遇到的问题。 我很头疼,我尝试将行设置为0或更多行,尝试了对我来说有意义的每个值,但是这对堆栈视图没有帮助。 在其上放置堆栈视图后,宽度更改为1600以上,(至少对我而言)没有意义。 我正在检查stackoverflow以查看是否有任何开发人员遇到与我相同的问题,并找到了这个问题。 投票最多的解决方案是为堆栈视图设置固定宽度。 我一直在想这不是苹果想要的。 事实并非如此。 解 这很简单,我想它只是一个错误。 只需在标签中设置一个占位符单词即可 ( 您可以使用多个单词,但不要使用完整的句子,这样此时它最终会以多行标签出现 ) 堆叠标签 用您打算使用的多行文字交换单词 完成这些步骤后,我能够按照本教程的要求堆叠视图。 我还没有玩过Xcode 8 beta,而且我仍然不是100%确信这确实是Apple的错误或某种原因,但是至少我不再遇到这个问题,老实说,试图解决这个问题这个问题对我总体上了解堆栈视图和约束有很大帮助。 问候, 一月