Можно ли использовать переменные и заполнители в сниппетах кода Xcode?

Ответ

Да, сниппеты кода в Xcode поддерживают заполнители (placeholders) и токены для динамического ввода и подсказок.

Синтаксис заполнителей:

// Базовый заполнитель
let <#variableName#> = <#initialValue#>

// Заполнитель с пояснением и типом
let <#T##title: String##String#> = "Hello"
// При вставке пользователь увидит: "title: String"

Практический пример создания сниппета:

  1. Выделите код в редакторе.
  2. Перетащите его в библиотеку сниппетов (нижняя часть панели Library, Cmd+Shift+L).
  3. В настройках сниппета задайте:
    • Title: Создать сетевой запрос
    • Completion Shortcut: netreq
    • Language: Swift
    • Snippet:
      func fetch<T: Decodable>(from urlString: String) async throws -> T {
      guard let url = URL(string: urlString) else {
      throw URLError(.badURL)
      }
      let (data, _) = try await URLSession.shared.data(from: url)
      return try JSONDecoder().decode(T.self, from: data)
      }

Системные токены (доступны через меню { }):

  • <#...#> — стандартный заполнитель.
  • <#T##Type##TypeName#> — заполнитель с подсказкой типа.
  • <#T##x: Int##Int#> — заполнитель с именем и типом.
  • #file, #function, #line — вставляются как литералы.

Работа с заполнителями: После вставки сниппета нажмите Tab для перехода между заполнителями и Enter для завершения редактирования.

Ответ 18+ 🔞

Слушай, а вот этот ваш Xcode — он же не просто тупой редактор, как блокнот, а там реально есть приколы! Например, сниппеты. Это не просто куски кода, которые ты сохранил, чтобы не писать сто раз одно и то же. Это, блядь, целые сценарии с заполнителями, как в умной анкете!

Вот смотри, как это выглядит, когда пишешь:

// Обычный плейсхолдер — просто дырка для текста
let <#variableName#> = <#initialValue#>

// А вот это уже поинтереснее, с подсказкой
let <#T##title: String##String#> = "Hello"
// Когда вставишь, увидишь прямо в коде: "title: String" — и сразу понятно, что сюда пихать.

А как самому такую штуку сварганить? Да проще пареной репы, ёпта!

  1. Написал в редакторе код, который вечно повторяешь. Выделил его.
  2. Поймал мышкой и потащил вниз, в ту самую библиотеку сниппетов (панелька Library, Cmd+Shift+L).
  3. Там откроется настройка. Заполняешь поля:
    • Название (Title): Ну, например, «Создать сетевой запрос».
    • Шорткат (Completion Shortcut): netreq — пишешь это в коде, и он подставится.
    • Язык (Language): Swift, естественно.
    • Сам сниппет (Snippet): Вот сюда и вставляешь свой умный код с этими <#...#>.

Вот, например, годный сниппет для запроса в сеть:

func fetch<T: Decodable>(from urlString: String) async throws -> T {
    guard let url = URL(string: urlString) else {
        throw URLError(.badURL)
    }
    let (data, _) = try await URLSession.shared.data(from: url)
    return try JSONDecoder().decode(T.self, from: data)
}

Ещё есть системные штуки, их можно вставить через меню { }:

  • <#...#> — классическая дырка.
  • <#T##Type##TypeName#> — дырка с намёком на тип.
  • <#T##x: Int##Int#> — дырка с именем и типом, вообще красота.
  • #file, #function, #line — это макросы, они сами подставятся.

А главный лайфхак: После того как вставил сниппет, жми Tab — курсор будет прыгать по всем этим заполнителям. Отредактировал один — Tab — перешёл к следующему. Закончил — Enter, и всё, ты уже в конце конструкции, готов писать дальше. Удобно, блядь, как! В рот меня чих-пых, раньше-то я этого не знал и всё руками переписывал!