Tag: 初始化

Swift 3中的初始化剖析

具有编程经验的软件开发人员应了解什么是“初始化”。 简而言之,这是在使用类或结构的实例之前涉及的一个过程。 在Swift中,这同样适用于枚举。 我浏览了有关初始化的Apple文档,https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html,并意识到Swift中有几个主要且有趣的功能值得分享,这最终促使我撰写了一篇主题相似的文章,但提供了有关每个主要功能的工作方式的更多示例。 但是,本文没有介绍与枚举有关的初始化概念。 本文旨在为我自己的学习提供参考,并希望与其他Swift开发人员分享“ Swift Initialization”。 在整个文章中,请始终阅读嵌入式屏幕截图中的绿色注释。 默认初始化程序和成员初始化程序 默认的初始值设定项是由类和结构自动引入的初始值设定项。 逐成员初始化器仅适用于结构,并且是默认初始化器的另一种形式。 默认初始化程序在类和结构之间的工作略有不同。 如果未定义自定义初始化 程序,则结构类型会自动提供成员初始化 程序 。 类类型没有。 成员级初始化程序采用所有存储的属性,并将其作为初始化程序的参数。 不管存储的属性是否默认为初始值,都以结构类型提供成员初始化程序 。 但是,当存储的属性具有默认值和没有默认值时,它的行为会有所不同。 在结构中,如果存储的属性在定义时默认使用值 ,并且未提供自定义初始化程序,则结构会自动引入两个初始化程序,即不带参数的默认初始化程序和逐成员初始化程序 。 但是,如果存储的属性在定义时没有默认值,则仅引入成员初始化器。 在下面的示例中, let car1 = Car()将触发编译异常。 自定义初始化 自定义初始化程序是开发人员在Swift中创建类或结构时定义的初始化程序。 定义自定义初始化程序后,将没有默认的无参数初始化程序或逐成员初始化程序 (如果它是结构)。 但是,如果我们希望使用默认的初始化器和成员初始化器以及我们自己的自定义初始化器来初始化结构,则可以在extension中编写自定义初始化器 。 请参阅以下部分以获取更多信息。 通过Swift扩展自定义初始化程序 扩展可以向现有类型添加新的便捷初始化程序 ,但不能指定初始值设定项 。 在structure中 ,如果存储的属性在定义时默认为值 ,并且未提供自定义初始化程序,则结构会自动引入两个初始化程序, 默认为无参数初始化程序和逐成员初始化程序,我们可以从中调用这两个初始化程序中的任何一个在扩展程序的初始化程序中。 初始化参数和参数标签 初始化参数可以具有用于初始化程序主体的参数名称 ,以及用于调用初始化程序时的可选 参数标签 。 但是,在定义初始值设定项的参数时使用_(下划线)符号时, 参数标签是可选的。 下面的代码显示了两个带有第二个初始化程序的初始化程序,这些初始化程序无需调用参数标签即可调用该初始化程序。 值类型的初始化程序委托(结构,枚举) […]

快速初始化

Swift已经引入了称为Optional的新型变量。 这些用于迅速保持零值。 由于存在这些变量,因此有关变量的初始化有一些更改。 这是相同的详细信息: 1.如果使用非可选属性,则必须快速启动初始化程序。 2.您需要先解开可选变量,然后再使用它们: 3.如果Property可以为nil,则使用? 属性之后,设置任何值之前: 4.如果在声明时解开属性,则可以直接使用它。 请注意,这不被认为是一种好的做法,因为它可能会在运行时导致崩溃。 5.在Swift新版本中,如果使用init方法,则需要实现initWithCoder方法。 6.在访问自身属性(例如视图)之前,必须在init和initWithCoder期间调用超类方法 。 7.您可以在调用超级方法之前创建对象,之后可以为该对象分配值: 8.您可以创建惰性属性,在惰性属性中,您可以在声明时分配值,但是只要我们使用该属性,就会执行Assign语句。 请注意,Lazy属性应始终使用var而不是let,因为常量在初始化之前必须具有值。 9.您可以使用Closure在惰性属性中添加任何逻辑。 您甚至可以在惰性属性中调用类OR实例方法 10.如果定义了任何自定义初始化程序,Swift会将它们区分为便捷初始化程序。 必须从便捷初始化程序调用任何默认的初始化程序(指定的初始化程序)。 需要修复如下:

Swift实用程序:视图实例化变得容易

我将在本节中介绍一系列文章,以创建实用程序类/函数,这些类/函数在开发过程中会很方便,让我们从视图实例化开始 在iOS应用程序开发期间,它是实例化视图的常见用例 通常我们可以通过3种方式实例化视图 使用XIB实例化 使用情节提要实例化 以编程方式创建视图并添加约束 最后一个超出了本文的范围。 使用XIB实例化 我们必须从主捆绑包实例化xib并加载它。 在这种情况下,代码将如下所示 使用情节提要实例化 在这里,我们实例化情节提要,然后使用其标识符加载viewController。 样本可以看如下 因此,上述实现非常完美,唯一的缺点是每次需要实例化新的viewcontroller时,都必须在代码行上方复制粘贴。 一种更简单的方法可能是概括上述方法以获取有关传递可变参数的视图 继续进行下去,我们可以概括上述方法,这样就不必在每次需要实例化视图时都复制粘贴相同的代码。 请从我尝试执行的以下仓库中导入代码。 pshrinivas / ViewInstantiable 方便快捷地实例化iOS视图的实用方法– pshrinivas / ViewInstantiable github.com 在这一步骤之后,实例化视图将是小菜一碟。 视图实例化可以如下进行 使用xib进行实例化:遵循以下可实例化的协议以查看或具有xib和view的viewcontroller 使用情节提要进行实例化:将情节提要协议与ViewController一致,并将情节提要名称作为参数传递 PS: 对于使用上述回购文件名,类名,XIB名称,应保持相同,否则将不起作用。 类似的标识符与故事板中的类名相同 因此,这种方式可以在很大程度上减少冗余代码。 请对此发表您的看法。 编码愉快!!! 感谢Ganesh&Karthik的校对。 现在我们知道任何错别字应归咎于谁