前言
和Apple
官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift
语言的一些概念和用法,方便大家更好地学习和掌握Swift
语言。
这同时也是对自己学习Swift
语言过程的知识整理。
如有错误,以你为准。
项目创建
我们新建一个PlayGround项目,命名为SwiftNestedTypes。
嵌套类型的定义
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
的方法时,只需要按照类的层级找到相应的方法即可调用。
不同类型的嵌套
上面介绍了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: "文雨的书")
以上就是本章的全部内容。
快来动手试试吧!
如果本专栏对你有帮助,不妨点赞、评论、关注~