In the process of learning the swift
language, you will constantly find some unbelievable syntax of swift
. After learning it, I often ask myself, “Is it really necessary? Before learning it, who would have thought that self
and Self
are different?
Keyword self
Scenario 1 Prefix self.
The prefix self.
is the most commonly used scenario, when the keyword self
, similar to the this
keyword in other languages, represents the instance of the current code run during the coding process.
|
|
Note that the prefix self. represents an instance object of the current type. In type definitions, if the prefix self. appears in an embedded type or anonymous function, be aware of what it refers to. This is somewhat similar to the confusing this
in es6.
In es6, the keyword this
, has nothing to do with functions, objects or classes, but only with the execution context.
Scenario 2 postfix .self
You can use the postfix self expression to access a type as a value. For example, SomeClass.self returns SomeClass itself, not an instance of SomeClass. And SomeProtocol.self returns SomeProtocol itself, not an instance of a type that conforms to SomeProtocol at runtime.
postfix .self
, returns the corresponding type
(type), not the instance
(instance).
The most common place to see this is in object deserialization operations, such as :
|
|
Looking at the function definition of decode, you can see that Foo.self
represents a meta-type of type Foo
.
Keyword Self
When I first saw the Self keyword, I thought it was the same thing as self, so I should just pay attention to the prefix and postfix. However, looking at the context, the symbol .
does not appear at all where Self is used.
The Self type isn’t a specific type, but rather lets you conveniently refer to the current type without repeating or knowing that type’s name.
In a protocol declaration or a protocol member declaration, the Self type refers to the eventual type that conforms to the protocol.
Extends a single property:
The Self
keyword is a simple way of writing code for the type Foo
and has no other properties of its own.