Swift实用小册18:NestedTypes嵌套类型的使用

简介: 在本章中,你将学会NestedTypes嵌套类型的使用方法。

image.png

前言


Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。

这同时也是对自己学习Swift语言过程的知识整理。

如有错误,以你为准。

项目创建


我们新建一个PlayGround项目,命名为SwiftNestedTypes。

image.png

嵌套类型的定义

NestedTypes嵌套类型,顾名思义就是一个类型中可以嵌套另一个类型。

在之前的章节中,我们单独学习过Class类、enum枚举、Struct结构体,我们还可以通过嵌套的方式将这些不同类型进行组合。比如,结构体中,可以包含嵌套定义的枚举类型。

相同类型的嵌套

在之前的章节中我们学习了class类的继承,但大家有没有发现一个问题,当我们子类很多的时候,继承关系就会很多。

这里我们就可以使用嵌套的方式表明类型之间的层级结构和关系,让调用的层级更加清晰。示例:

class Person {
    var fullName = Name()
    class Name {
        var firstName: String = "文雨"
        var lastName: String = "卫斯理"
        func FullName() -> String {
            return "\(firstName)+\(lastNmae)"
        }
    }
}

上述代码中,我们创建了一个类Name,声明了两个String类型的变量:firstNamelastNmae,并赋予了初始值。然后我们定义了一个FullName方法,返回一个由firstNamelastName组合的String字符串类型的返回值。

然后我们再定义了一个类Person,嵌套类Name,并声明了一个变量fullName获得类。

上面的嵌套关系,我们就把类Name嵌套在Person类里,如果我们有多个类,也都可以嵌套在Person类里,这样我们就把需要用到的一些类都包含在一个类里,既能表明层级结构,也能使类之间的关系更加清晰

如果需要调用Name类中的FullName方法,我们只需要使用点语法进行调用。示例:

let person = Person()
person.fullName.FullName()

上述代码中,我们声明了一个常量person来接收Person类,当我们要调用FullName的方法时,只需要按照类的层级找到相应的方法即可调用。

image.png

不同类型的嵌套

上面介绍了class类嵌套class类,Struct结构体方式也类似,对于不同类型的嵌套在实际开发情况下也很常见。示例:

struct Book {
    let title: String
    let text: String
    class FindBook {
        enum Option {
            case noNames
            case noLinks
        }
        func textChek(bookName: String) -> Bool {
            bookName.count < 1 ? false : true
        }
    }
}

上述代码中,我们定义了一个Book结构体,Book结构体中有两个String类型的常量:titletext

Book结构体还嵌套一个类FindBook,类FindBook还嵌套了一个枚举Option,类FindBook中定义了一个textChek方法。

我们要调用textChek方法时,只需要在层级中往下找就可以调用了。示例:

Book.FindBook().textChek(bookName: "文雨的书")

这样,我们就清楚知道textChek是在哪个层级中,顺着这个层级就可以调用方法。上述代码中,textChek方法是在Book结构体的FindBook类中。

image.png

本章代码


import UIKit
class Person {
    var fullName = Name()
    class Name {
        var firstName: String = "文雨"
        var lastName: String = "卫斯理"
        func FullName() -> String {
            return "\(firstName)+\(lastName)"
        }
    }
}
let person = Person()
person.fullName.FullName()
struct Book {
    let title: String
    let text: String
    class FindBook {
        enum Option {
            case noNames
            case noLinks
        }
        func textChek(bookName: String) -> Bool {
            bookName.count < 1 ? false : true
        }
    }
}
Book.FindBook().textChek(bookName: "文雨的书")

以上就是本章的全部内容。

快来动手试试吧!

如果本专栏对你有帮助,不妨点赞、评论、关注~

相关文章
|
7月前
|
存储 Swift iOS开发
在Swift编程语言中,集合类型`Set`
在Swift编程语言中,集合类型`Set`
63 2
|
1月前
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
30 2
|
1月前
|
Swift 索引 容器
Swift 泛型-扩展泛型类型
Swift 泛型-扩展泛型类型
33 2
|
1月前
|
Swift 索引
Swift 泛型-类型约束
Swift 泛型-类型约束
30 1
|
1月前
|
安全 Swift iOS开发
Swift 可选(Optionals)类型
10月更文挑战第24天
39 2
|
7月前
|
存储 安全 Swift
【Swift开发专栏】Swift中的集合类型:数组、字典与集合
【4月更文挑战第30天】本文探讨Swift的三种内置集合类型:数组、字典和集合。数组是有序元素集合,支持动态大小调整和类型安全;字典是无序键值对,适用于快速查找;集合是无序不重复元素集合,适合检查元素存在性和集合运算。理解这些特性和用法能提升Swift编程效率。
72 1
|
7月前
|
安全 Swift
【Swift开发专栏】Swift中的可选类型与解包
【4月更文挑战第30天】Swift的可选类型(Optional)用于表示变量可能无值,如用户未填写表单或空服务器数据。可选类型用问号(?)标记,状态可为包含值或nil。解包包括强制解包(!,可能触发运行时错误)、可选绑定(在if/while中安全解包)和隐式解包(声明时带!,使用时不需显式解包)。高级用法包括可选链式调用、空合并操作符(??)和可选类型比较。理解并恰当使用这些概念能提升代码的健壮性和安全性。
74 1
|
7月前
|
安全 Swift
Swift 语言:什么是可选类型(Optional)?如何处理可选类型的安全解包?
Swift的可选类型是处理值可能缺失的类,用?表示。它们能表示有值或无值状态。安全解包用`if let`或`guard let`避免崩溃,而强制解包`!`则风险较高,若值为`nil`会触发运行时错误。
54 0
|
7月前
|
存储 Swift 索引
在 Swift 编程语言中,集合类型 `Set`
在 Swift 编程语言中,集合类型 `Set`
67 1
|
7月前
|
Swift
在Swift编程语言中,有符号整数类型
在Swift编程语言中,有符号整数类型
67 2