首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift在数组中使用自定义类型,但始终打印类型名称而不是值

Swift 是一种开发 iOS、macOS、watchOS 和 tvOS 应用程序的编程语言。在 Swift 中,可以使用自定义类型来创建数组,而不仅仅限于基本数据类型。当我们在数组中存储自定义类型的实例时,默认情况下,打印数组元素时会显示该类型的名称,而不是实例的具体值。

为了能够打印数组中自定义类型的值而不是类型名称,我们需要在自定义类型中采用 CustomStringConvertible 协议,并实现 description 属性。这样做可以自定义类型的字符串描述,并使其在打印时显示实例的值而不是类型名称。

下面是一个例子,演示了如何在 Swift 中打印数组中自定义类型的值:

代码语言:txt
复制
struct Person: CustomStringConvertible {
    var name: String
    var age: Int

    var description: String {
        return "\(name), \(age)岁"
    }
}

let people = [Person(name: "张三", age: 20), Person(name: "李四", age: 25), Person(name: "王五", age: 30)]

for person in people {
    print(person)
}

输出结果将会是:

代码语言:txt
复制
张三, 20岁
李四, 25岁
王五, 30岁

通过实现 CustomStringConvertible 协议并重写 description 属性,我们可以自定义自定义类型的描述方式,从而打印出实例的具体值。

在腾讯云的云计算服务中,针对 Swift 开发者,推荐使用云服务器 CVM 来进行 Swift 应用程序的部署和运行。您可以通过 腾讯云云服务器产品页面 获取更多关于云服务器的信息。

相关搜索:使用chai通过值而不是类型来测试数组如何使用reactjs中的'timestamp‘类型而不是'map’类型在firebase中存储数据在swift中为指定类型的数组添加自定义init方法UITableView在Swift中始终显示基本单元格,而不是自定义单元格在python中如何使用变量名而不是变量类型?在Swift中更改数组类型的PFUser对象中元素的值在MongoDB中查找属于名称/值对的值而不是数组元素的子文档在wordpress中仅为帖子类型而不是页面插入元名称关键字标记在numpy数组中为自定义数据类型设置多个值我想知道为什么&a(数据类型: char)被打印为值而不是地址,使用%s在java中动态访问和确定对象(而不是数组/列表)的元素及其类型如何使用名称列表在派生类型中编写可分配数组?在不使用任何类型的情况下,如何在Swift中存储具有关联类型的协议数组?让单例使用来自initWithCoder的值,而不是在Swift中创建新实例使用asp.net显示值在不同表中的GridView中的名称而不是IdMongodb c# changestream,如何使用数组变量而不是在$in、filter中的[]中定义值条件绑定的初始值设定项必须具有可选类型,而不是在随机处理时使用“[String]”保护let如何对类型为array的变量使用getter和setter,以便按索引而不是整个数组本身访问数组中的项为什么我们必须在使用boto3客户端时指定属性类型,而不是在资源中?我在java中使用泛型来查找数组的最大值,但它只接受双精度数据类型,而不接受其他数据类型。
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Swift基础 扩展

Swift的扩展可以: 添加计算实例属性和计算类型属性 定义实例方法和类型方法 提供新的初始化器 定义下标 定义和使用新的嵌套类型 使现有类型符合协议 Swift ,您甚至可以扩展协议,以提供其要求的实现...虽然它们是作为计算属性实现的,这些属性的名称可以附加到带有点语法的浮点字面值,作为使用该字面值执行距离转换的一种方式。 本例,1.0的Double被视为表示“一米”。...如果您使用扩展程序将初始化器添加到为其所有存储属性提供默认且不定义任何自定义初始化器的类型,您可以从扩展的初始化器调用该类型的默认初始化器和成员初始化器。...对于数组的每个整数,函数考虑该整数的kind计算属性,并打印适当的描述。 注意 number.kind已经知道是Int.Kind类型。...因此,所有Int.Kind大小写都可以switch语句中以速记形式书写,例如.negative不是Int.Kind.negative。

10800

Swift基础 功能(Functions)

使用函数,您可以“调用”该函数及其名称,并将其传递与函数参数类型匹配的输入(称为参数)。函数的参数必须始终以与函数参数列表相同的顺序提供。...以下是greet(person:)函数的版本,该函数打印自己的String不是返回它: func greet(person: String) { print("Hello, \(person...注意 返回可以忽略,表示将返回的函数必须始终这样做。具有定义返回类型的函数不允许控件不返回的情况下从函数底部掉出来,尝试这样做将导致编译时错误。...您使用变异参数来指定在调用函数时可以传递不同数量的输入。通过参数的类型名称后插入三个句号字符(...)来编写变量参数。 传递给变量参数的作为适当类型数组函数的主体内提供。...例如,具有numbers名称和Double...类型的变量参数函数的主体作为称为类型[Double]``numbers的常数数组提供。

14700
  • Swift: 有用的标准库全局函数

    全局函数 Global functions :无需特定类型范围就可以从任何地方访问的函数是一个古老的概念, C 和 Objective-C 等语言中很流行,但是 Swift 不建议使用,因为我们希望对它们进行很好的类型化和范围划分...尽管打印对象只是类型的description或debugDescription属性的语法糖,dump是Mirror(reflecting :)的增强版本,它使用反射来打印对象的内容,这通常会产生更多信息...尽管结构本身就是类型其中的内容可能不是。...标准库如何实现对数组和字符串的写时复制(copy-on-write)语义的实现——我在有关类型的内存管理的文章已经提到了这一点。...本文未在本节单独提及,因为如果需要交换数组元素,则使用的正确方法是Array.swapAt()。但是,需要创建伪“aux”属性来保存的其他情况下,仍然可以使用swap()。

    2.7K20

    Swift 类和结构体

    结构体和枚举是类型 类型被赋予给一个变量、常量或者被传递给一个函数的时候,其会被拷贝。 之前的章节,我们已经大量使用类型。...实际上, Swift ,所有的基本类型:整数(Integer)、浮点数(floating-point)、布尔(Boolean)、字符串(string)、数组(array)和字典(dictionary... Swift ,所有的结构体和枚举类型都是类型。这意味着它们的实例,以及实例中所包含的任何类型属性,代码传递的时候都会被复制。...Swift 的这些引用与其它的常量或变量的定义方式相同。 类和结构体的选择 在你的代码,你可以使用类和结构体来定义你的自定义数据类型。 然而,结构体实例总是通过传递,类实例总是通过引用传递。...该数据结构中储存的类型属性,也应该被拷贝,不是被引用。 该数据结构不需要去继承另一个既有类型的属性或者行为。

    1.2K40

    Swift基础 基础知识

    Swift还引入了可选类型,用于处理缺失的情况。可选内容要么说“有一个,它等于x”或“根本没有”。使用可选类似于Objective-C中使用nil和指针,但它们适用于任何类型不仅仅是类。...在上面的welcomeMessage示例,没有提供初始,因此welcomeMessage变量的类型类型注释指定,不是从初始推断。...to be of type Double Swift推断浮点数类型时总是选择Double(不是Float)。...Objective-C,’ nil ‘是一个指向不存在对象的指针。Swift,’ nil ‘不是一个指针——它是一个特定类型的缺失。...来编写隐式打开的可选选项不是问号(String?)您想要选择的类型之后。使用时,不要在可选名称后放置感叹号,而是声明选项类型后放置感叹号。

    15400

    Swift基础 可选链条

    注意 Swift的可选链类似于Objective-C的消息nil,以适用于任何类型的方式,并且可以检查成功或失败。 可选链作为强制打开包装的替代方案 您通过放置问号(?)...您可以使用此可选返回来检查可选链调用是否成功(返回的可选包含),还是由于链的nil没有成功(返回的可选为nil)。 具体来说,可选链调用的结果与预期返回类型相同,包装在可选中。...它通过可选链查询的事实意味着对numberOfRooms调用将始终返回anIntInt?不是Int。...通过可选链条访问下标 您可以使用可选链尝试从可选的下标检索和设置,并检查该下标调用是否成功。 注意 当您通过可选链访问可选的下标时,您将问号放在下标括号之前,不是之后。...下面的示例试图使用Residence类上定义的下标检索john.residence属性的rooms数组第一个房间的名称

    11400

    Codable 解析 JSON 忽略无效的元素

    默认情况下,使用 Swift 内置的 Codable API 编码或解码数组只有全部成功或者全部失败两种情况。...但是,有时我们可能希望调整该行为,以便忽略无效元素,不是导致整个编解码过程失败。...上面的示例似乎有些人为设计,意外遇到格式错误或不一致的JSON 数据其实非常常见,我们可能无法始终调整这些格式以使其完全适应Swift 天然的静态性。...因此,让我们来看一下如何在解码任何 Decodable 数组时忽略所有无效元素,不必对 Swift 数据的结构进行任何的重大修改。...类型和属性包装器 关于Swift实现属性包装器的方式的一件真正整洁的事情是,它们都是标准的Swift类型,这意味着我们可以对LossyCodableList进行改造,使其还可以充当属性包装器。

    3.2K40

    Swift基础 初始化

    注意 如果属性总是具有相同的初始,请提供默认不是初始化器设置。最终结果相同,默认将属性的初始化与其声明更紧密地联系起来。它使初始化器更短、更清晰,并使您能够从其默认推断属性的类型。...因此,初始化器参数的名称类型确定应该调用哪个初始化器方面发挥着特别重要的作用。因此,如果您不提供初始化器的每个参数,Swift会为自动参数标签。...注意 如果您希望自定义类型可以使用默认初始化器和成员初始化器初始化,也可以使用您自己的自定义初始化器初始化,请在扩展编写自定义初始化器,不是作为类型原始实现的一部分。...Swift的初始化流程更加灵活,因为它允许您设置自定义初始,并可以处理0或nil不是有效默认类型。...这告诉Swift立即执行关闭。如果您省略这些括号,您将尝试将闭包本身分配给属性,不是闭包的返回。 注意 如果您使用闭包初始化属性,请记住,执行闭包时,实例的其余部分尚未初始化。

    16800

    Swift基础 类型铸造

    Swift类型转换是用is``as运算符实现的。这两个运算符提供了一种简单富有表现力的方式来检查类型或将转换为其他类型。...但是,如果您迭代此数组的内容,则您收到的项目被键入为MediaItem,不是Movie或Song。为了将他们作为他们的原生类型,您需要检查他们的类型,或将他们降为其他类型,如下所述。...每次传递,for-in循环将item常量设置为数组的下一个MediaItem。 item is Movie如果当前MediaItem是Movie实例,则返回true,如果不是,则返回false。...这是必要的,这样它才能访问Movie或Song的director或artist属性,以便在描述中使用本例数组的每个项目可能是Movie,也可能是Song。...如果成功,请将名为movie的新临时常量设置为存储返回的可选Movie。” 如果压制成功,则使用movie的属性来打印该Movie实例的描述,包括其director的姓名。

    8900

    Swift算法俱乐部:Swift栈(Stack)数据结构

    注意,push操作会将新元素放在数组的末尾,不是开始。 在数组的开头插入代价很昂贵,因为它需要所有现有的数组元素在内存移位。 最后加上O(1); 无论数组大小如何,它总是需要相同的时间。...除了名称之外,唯一的区别是peek避免了对数组内容进行操作,因此在这种情况下mutating关键字不是必需的。 开始测试 此时,Swift栈已准备好。...这需要是一个变量不是一个常量,因为下面我们需要改变栈的内容。 堆栈PUSH了一个字符串。...为了打印的美观加上----和换行 由于您已将元素附加到数组后面,因此您需要先倒转数组。...之后用joined(separator: "\n")方法简单地使用数组的每个元素,并在每个元素之间使用分隔符将它们连接在一起。

    1.7K20

    Swift基础 协议

    他们必须始终明确宣布通过该议定书。 使用综合实现采用协议 许多简单的情况下,Swift可以自动为Equatable、Hashable和Comparable提供协议一致性。...注意 当该协议要求定义的行为假设或要求符合的类型具有参考语义不是语义时,请使用仅类协议。有关引用和语义的更多信息,请参阅结构和枚举是类型,类是参考类型。...当您在可选需求中使用方法或属性时,其类型会自动成为可选类型。例如,类型(Int)->String的方法变为((Int)->String)?请注意,整个函数类型包装在可选中,不是方法的返回。...这允许您定义协议本身的行为,不是每种类型的单个一致性或全局函数。...协议继承总是协议声明本身中指定。 提供默认实现 您可以使用协议扩展为该协议的任何方法或计算属性要求提供默认实现。如果符合的类型提供了自己实现所需的方法或属性,则将使用该实现不是扩展提供的实现。

    14900

    Swift基础 嵌套

    您不需要指定闭包输入参数number的类型,因为类型可以从要映射的数组推断出来。 本例,变量number使用闭包number参数的初始化,以便可以闭包主体内修改该。...(函数和闭包的参数始终是常量。)闭包表达式还指定了String的返回类型,以指示将存储映射输出数组类型。 闭包表达式每次调用时都会构建一个名为output的字符串。...在上面的示例,保证number%10始终是digitNames字典的有效下标键,因此使用感叹号来强制解开存储在下标可选返回的String。...这意味着它返回一个函数,不是一个简单的。它返回的函数没有参数,每次调用都返回一个’ Int ‘。要了解函数如何返回其他函数,请参阅函数类型作为返回类型。...它不需要任何参数,当调用它时,它会返回包裹在里面的表达式的。这种语法便利性允许您通过编写正态表达式不是显式闭包来省略函数参数周围的大括号。 通常调用带有自动闭包的函数,实现这类函数并不常见。

    12800

    swift4.0语法杂记(精简版)

    swift中所有的代码都被封装在{}里面 OC使用alloc init进行初始化,swift使用() OC中使用[]来调用方法,swift采用点语法。...其实,swift,是不存在基本的数据类型的,所谓的数据类型,其实都只是结构体。这也是swift的一个特点。 ? 2、变量和常量 声明 swift中用let声明常量,用var声明变量。...数组是有序数据的集,集合是无序无重复数据的集,字典则是无序的键值对的集。 数组使用有序列表存储同一类型的多个。相同的可以多次出现在一个数组的不同位置。...当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合不是数组。 集合的元素必须有确定的hashvalue,或者是实现了hashable协议。...swift,用到了大量的结构体,比如说基本的数据类型都是结构体不是类。这意味着它们被赋值给新的常量或者变量,或者被传入函数或方法时,会被拷贝。

    15.4K90

    Swift基础 通用

    例如,Swift的Array和Dictionary类型都是通用集合。您可以创建一个包含Int数组,或包含String数组,或者为可以Swift创建的任何其他类型数组。...(本例称为T)不是实际类型名称(如Int、String或Double)。...注意 始终给出类型参数上骆驼大小写名称(如T和MyTypeParameter),以指示它们是类型不是的占位符。 通用类型 除了通用函数外,Swift还允许您定义自己的通用类型。...您可以创建自定义泛型类型时定义自己的类型约束,这些约束提供了泛型编程的大部分功能。像Hashable抽象概念根据概念特征不是具体类型来描述类型。...请注意,此函数的返回类型仍然是Int?,因为该函数返回可选索引号,不是数组的可选

    10700

    Swift基础 集合类型

    数组是有序的集合。集合是唯一的无序集合。字典是键值关联的无序集合。 Swift 数组、集合和字典始终清楚可以存储的和键的类型。这意味着您不能错误地将错误类型插入集合。...您还可以将数组类型以速记形式写为[Element]虽然这两种形式功能上相同,速记形式是首选,并在参考数组类型整个指南中使用。...注意 shoppingList数组被声明为变量(使用var介绍器),不是常量(使用let介绍器),因为在下面的示例,购物列表添加了更多项目。...Sets 集合在集合存储相同类型的不同,没有定义的顺序。当项目顺序不重要时,或者当您需要确保项目只出现一次时,您可以使用集合不是数组。...注意 您可以使用自己的自定义类型作为设置类型或字典键类型,使其符合Swift标准库的Hashable协议。有关实现所需hash(into:)方法的信息,请参阅Hashable。

    10800

    使用Codable归档Swift对象

    UserDefaults非常适合存储简单的设置,例如整数和布尔,但是当涉及复杂数据时——例如自定义Swift类型——我们需要做更多的工作。...我们将在未来的项目中更多地研究Codable,但是目前我们的需求很简单:我们想要归档一个自定义类型,以便可以将其放入UserDefaults,然后在从UserDefaults返回时将其取消存档。...当使用仅具有简单属性的类型(字符串,整数,布尔,字符串数组等)时,支持归档和取消归档的唯一需要做的就是向Codable添加一致性,如下所示: struct User: Codable { var...该名称暗示它特定于JavaScript,实际上,我们都使用它,因为它是如此的快速和简单。 Codable协议不需要我们使用JSON,实际上可以使用其他格式,这是迄今为止最常见的格式。...当我们返回另一种方式时(当我们拥有JSON数据并且想要将其转换为Swift Codable类型时),我们应该使用JSONDecoder不是JSONEncoder,但是过程大致相同。

    2.1K30

    Swift入门: 数组

    数组允许您将许多值组合到一个集合,然后根据它们集合的位置访问这些。...错误并不是因为Swift不能处理这样的混合数组,我将在稍后向您展示如何处理这些数组!——相反,因为Swift是乐于助人的。...类型安全是很重要的,尽管Swift可以使数组保存任何类型的数据,这是一个意外。幸运的是,我已经说过可以使用类型注释来确切地指定希望数组存储的数据类型。...to December", 3] 既然我们已经告诉Swift我们只想在数组存储字符串,它总是拒绝运行代码,因为3不是字符串。...to December", 3] 创建数组 如果使用上面显示的语法创建数组Swift将创建数组并用我们指定的填充它。

    76410

    万字长文|Swift语法全面解析|附示例

    Swift 通过采用现代编程模式来避免大量常见编程错误: 变量始终使用前初始化。 检查数组索引超出范围的错误。 检查整数是否溢出。 可选确保明确处理 nil 。 内存被自动管理。...集合的可变性,数组(Arrays),集合(Sets),集合操作,字典 数组使用有序列表存储同一类型的多个。相同的可以多次出现在一个数组的不同位置。 集合用来存储相同类型并且没有确定顺序的。...当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合不是数组。...存储属性会将常量和变量存储为实例的一部分,计算属性则是直接计算(不是存储)。计算属性可以用于类、结构体和枚举,存储属性只能用于类和结构体。...但是,类型属性是通过类型本身来访问,不是通过实例。

    3.6K22

    使用 Codable 归档 Swift 对象

    UserDefaults非常适合存储简单的设置,例如整数和布尔,但是当涉及复杂数据时——例如自定义Swift类型——我们需要做更多的工作。...我们将在未来的项目中更多地研究Codable,但是目前我们的需求很简单:我们想要归档一个自定义类型,以便可以将其放入UserDefaults,然后在从UserDefaults返回时将其取消存档。...当使用仅具有简单属性的类型(字符串,整数,布尔,字符串数组等)时,支持归档和取消归档的唯一需要做的就是向Codable添加一致性,如下所示: struct User: Codable { var...该名称暗示它特定于JavaScript,实际上,我们都使用它,因为它是如此的快速和简单。 Codable协议不需要我们使用JSON,实际上可以使用其他格式,这是迄今为止最常见的格式。...当我们返回另一种方式时(当我们拥有JSON数据并且想要将其转换为Swift Codable类型时),我们应该使用JSONDecoder不是JSONEncoder,但是过程大致相同。

    1.2K20
    领券