斯威夫特的自我
今天我在谈论Swift中的self
关键字。 让我们先检查一些代码。
这是关于属性初始化的错误使用,但是开始我们的主题是个好方法。
这是运行后的日志:
有人可能会问为什么self
在这里是一个函数,它不应该是当前类的实例吗? 好,让我们添加一些东西。
和添加lazy
关键字后的日志:
看到, self
成为我们现在期望的当前类的实例。
那么, lazy
这个魔术词做什么呢?
也就是说,关键字lazy
确保默认闭包内的self
被初始化并引用当前实例。 但是,当没有lazy
声明时, self
指的是什么?
我们知道许多语言都有关键字self
,例如Ruby和Python。 还有许多其他语言具有相同的模式,但是在JavaScript,C#和Java中使用了不同的关键字,例如this
。 而且,JavaScript中的this
始终是指诸如global
东西,但是迅捷的self
并不总是具有意义。
让我们进一步了解我们在一开始所声明的内容。
看来我们可以得出结论了。
开始时的self
是指NSObjectProtocol中的self
。
让我们做一个小实验:
我们声明一个名为SomethingNotInheritedFromNSObject
的类,该类未从NSObject继承。 并且self
在初始关闭时变得不确定。 这就是Swift中的自我。