有时使用可选类型会感到有些笨拙,并且所有解包和检查工作都变得如此繁重,以至于您可能会想起一些感叹号来强制展开内容,以便继续工作。但是请注意:如果您强制拆开没有值的可选选项,则代码将崩溃。...
结构体是复杂的数据类型,这意味着它们由多个值组成。然后创建结构的实例并填充其值,然后可以在代码中将其作为单个值传递。例如,我们可以定义一个Person结构体类型,它包含两个属性:clothes和shoes:...
Swift有另一种方法来构建称为类的复杂数据类型。它们看起来类似于结构体,但有许多重要的区别,包括:
结构体和类(统称为“类型”)可以有自己的变量和常量,这些称为属性。这些方法允许您将值附加到类型以唯一地表示它们,但因为类型也可以有方法,所以您可以让它们根据自己的数据进行操作。...
在Swift中,您可以创建属于类型而不是类型实例的属性和方法。这有助于通过存储共享数据来有意义地组织数据。
大多数情况下,您不需要指定访问控制,但有时您会希望显式地将属性设置为私有,因为它会阻止其他人直接访问它。这是很有用的,因为您自己的方法可以使用该属性,但其他方法不能,从而迫使它们通过您的代码执行某些操作。...
因为类可以相互继承(例如CountrySinger可以从Singer继承),这意味着一个类实际上是另一个类的超集:B类拥有A类所拥有的所有东西,还有一些额外的东西。这反过来意味着你可以把B当作B型或者A型,这取决于你的需要。...
到目前为止,您已经遇到了整数、字符串、双精度数、浮点数、布尔值、数组、字典、结构和类,但是还有另一种类型的数据在Swift中广泛使用,它被称为闭包。这些是复杂的,但它们是如此强大和富有表现力,它们在 Cocoa Touch 广泛...
协议在Swift中是有效的契约:它们定义了一组方法和属性,如果一个类型说它遵守协议,那么它必须实现这些方法和属性。这个合同让我们可以灵活地使用不同的类型来解决同一个问题——我们不知道是使用ThingA还是ThingB,只要它...
扩展允许我们以一种非常干净的方式修改Swift的数据类型以添加新的功能——我们的新代码与现有代码没有区别。