Использование бесполезного object.self.self.. или Class.self.self.. когда-нибудь понадобится?

Давайте напишем простой класс, чтобы объяснить в моей голове:

class SomeClass {
    var happyToUsed = 10
}

И создать объект

let someObject = SomeClass()

и используйте его свойство для случая 1:

someObject.happyToUsed  // prints 10

для случая 2:

someObject.self.happyToUsed // prints 10

и случай 3

someObject.self.self.self.self.happyToUsed  // prints 10 compiler is still ok, even if self count 1k

Я знаю, что случай 1 и случай 2 одинаковы (непосредственно указывают на один и тот же объект). Даже если я использовал SomeClass.self, а не объекты, случаи будут действовать одинаково. До сих пор я когда-либо использовал случай 3 в проекте.

Мой вопрос: есть ли какой-нибудь пример случая 3, который я должен предпочесть или негативно повлиять на управление памятью?

На самом деле я не вижу смысла в этом вопросе, но, поскольку рекомендуется не использовать self, если это действительно не нужно, поэтому для вашего кода только случай 1 является правильным использованием self

Joakim Danielson 19.12.2020 12:22

@JoakimDanielson спасибо, я когда-либо использовал до случая 3, но мне просто интересно, в случае 3 есть смысл или нет.

zeytin 19.12.2020 12:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
2
303
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это Самовыражение Postfix в соответствии со ссылкой на Swift:

Постфиксное самовыражение состоит из выражения или имени типа, за которым сразу следует .self

Первая форма вычисляет значение выражения. Например, x.self оценивается как x.

Тот факт, что вы можете писать .self бесконечно, является лишь побочным эффектом этого определения. Поскольку x.self само по себе является выражением, вы также можете добавить к нему .self. И ты можешь делать это вечно.

Это не значит, что вы должны, хотя.

Они делают то же самое:

let x                         =                          10
let x = 10

Надеюсь, вы согласитесь, что второе читается лучше. Точно так же .self обычно избыточен. Согласно этому обсуждению, кажется, что .self на самом деле просто наследие Objective-C. ИМО, это также делает синтаксис, такой как путь ключа идентификации (\.self), «имеет больше смысла».

Между ними нет различий, в конечном итоге вы указываете на один и тот же экземпляр; Классы являются ссылочными типами, поэтому, что бы ни случилось, они всегда будут указывать на одну и ту же ссылку; Вам не нужно повторять его, так как он занимает то же место в памяти, которое уже зарезервировано.

Спасибо, но я не спрашивал, какой тип ссылки.

zeytin 19.12.2020 17:11

Я знаю, я просто добавил это как дополнительное объяснение

Menaim 19.12.2020 17:56

Другие вопросы по теме