0
点赞
收藏
分享

微信扫一扫

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

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

前言

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

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

如有错误,以你为准。

项目创建

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

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

嵌套类型的定义

​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​​​类型的变量:​​firstName​​​、​​lastNmae​​​,并赋予了初始值。然后我们定义了一个FullName方法,返回一个由​​firstName​​​和​​lastName​​​组合的​​String​​字符串类型的返回值。

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

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

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

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

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

Swift实用小册18:NestedTypes嵌套类型的使用_swift语言_02

不同类型的嵌套

上面介绍了​​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​​类中。

Swift实用小册18:NestedTypes嵌套类型的使用_swift语言_03

本章代码

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

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

快来动手试试吧!

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

举报

相关推荐

0 条评论