百日学 Swift(Day 9) – 结构体 第 2 部分:访问控制、静态属性和懒加载

百日学 Swift(Day 9) – access control, static properties, and laziness(结构体 第 2 部分:访问控制、静态属性和懒加载)

1. Initializers(初始化器)test

初始化程序是特殊的方法,提供了创建结构的不同方法。默认情况下,所有结构都带有一个结构,称为成员初始化程序 ——这要求您在创建结构时为每个属性提供一个值。

可以提供自己的初始化程序来替换默认的初始化程序。不必在初始化器前写 func,但需要确保初始化结束时所有的属性都有值。

2. Referring to the current instance(引用当前实例)test

struct Person {
    var name: String

    init(name: String) {
        print("\(name) 被创建!")
        self.name = name		// self.name引用属性,而name引用参数。 
    }
}

3. Lazy properties(懒惰属性)test

struct FamilyTree {
    init() {
        print("创建家谱")
    }
}

我们可以将该FamilyTree结构用作Person结构内部的属性,如下所示:

struct Person {
    var name: String
    var familyTree = FamilyTree()

    init(name: String) {	// 初始化并未给family值(调用FamilyTree)
        self.name = name
    }
}

var confucius = Person(name: "孔子")	// 但是仍会调用,因为要确保每个属性都有值,所以打印了。

但是,如果我们不总是需要某个人的家谱怎么办?如果我们将lazy关键字添加到familyTree属性,则Swift仅在FamilyTree首次访问该结构时才会创建该结构:

lazy var familyTree = FamilyTree()

这样初始化后,familyTree 为 nil,就不会打印了。

因此,如果您想看到消息“创建家谱” ,您需要至少访问一次该属性:

confucius.familyTree

4. Static properties and methods(静态属性和方法)test

struct Student {
    static var classSize = 0	// 静态变量
    var name: String

    init(name: String) {
        self.name = name
        Student.classSize += 1	// classSize属性属于结构本身而不是结构实例
    }
}

let lilei = Student(name: "李雷")
let hanmeimei = Student(name: "韩梅梅")
print(Student.classSize)	// 结果是 2

5. Access control(访问控制)test

struct Person {
    private var id: String	// 将 id 属性设为私有,只有结构体内部可以访问,结构体外部不可访问

    init(id: String) {
        self.id = id
    }

    func identify() -> String {
        return "我的身份证号码是 \(id)"
    }
}
  • 如果使用 public 关键字,则会允许所有其他代码访问。

6. Structs summary(结构体小结)test

  • 可以使用结构创建自己的类型,这些结构可以具有自己的属性和方法。关键字 struct
  • 可以使用存储属性,或使用计算属性即时计算值。
  • 如果要在方法内更改结构体的属性,则必须将方法标记为mutating
  • 初始化程序init()是创建结构的特殊方法。默认情况下,将获得一个成员初始化器,但是如果创建自己的初始化器,则必须为所有属性赋予一个值(虽然可能不必要传递所有的参数给初始化器)。
  • 使用self常量来引用方法内部结构的当前实例。
  • lazy关键字告诉 Swift 只能创建属性,当第一次使用时再调用或赋值。
  • 可以使用static关键字在结构的所有实例之间共享属性和方法。
  • 访问控制可以限制其它代码使用属性和方法。
发布了51 篇原创文章 · 获赞 15 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/hh680821/article/details/105172688
今日推荐