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

举报
文如秋雨 发表于 2022/08/30 13:10:03 2022/08/30
【摘要】 在本章中,你将学会NestedTypes嵌套类型的使用方法。前言和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。这同时也是对自己学习Swift语言过程的知识整理。如有错误,以你为准。项目创建我们新建一个PlayGround项目,命名为SwiftNestedTypes。嵌套类型的定义NestedType...
在本章中,你将学会NestedTypes嵌套类型的使用方法。

前言


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

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

如有错误,以你为准。

项目创建


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




嵌套类型的定义


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

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

相同类型的嵌套


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

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

class Person {
    var fullName = Name()

    class Name {
        var firstName: String = "文雨"
        var lastNmae: String = "卫斯理"

        func FullName() -> String {
            return "\(firstName)+\(lastNmae)"
        }
    }
}

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

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

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

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

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

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




不同类型的嵌套


上面介绍了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类型的常量:title、text。

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

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

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

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


本章代码


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: "文雨的书")

以上就是本章的全部内容。
快来动手试试吧!
如果本专栏对你有帮助,不妨点赞、评论、关注~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。