Skip to content

Instantly share code, notes, and snippets.

View tsabian's full-sized avatar
🏡
I may be slow to respond.

Tiago Oliveira tsabian

🏡
I may be slow to respond.
View GitHub Profile

Perfeito 🙌 Aqui está uma tabelinha de referência rápida para representar valores no Swift, comparando o estilo clássico de formatação (String(format:)) com a forma moderna de interpolação (\(variável)):


🔹 Formatadores clássicos (String(format:))

Especificador Tipo esperado Exemplo Saída
%@ String / NSString String(format: "Olá, %@", "Maria") Olá, Maria
%d / %i Int String(format: "Idade: %d", 28) Idade: 28

Debouncing

A maneira mais moderna e limpa de fazer isso em Swift é usando Task do novo sistema de Concorrência Estruturada. A ideia é criar uma nova tarefa de busca a cada chamada do método e cancelar a anterior.

💡 Abordagem Moderna com Task e async/await

Esta abordagem é a mais recomendada para projetos recentes.

Passo 1: Adicione uma Propriedade para Gerenciar a Tarefa

#!/bin/bash
pasta_de_entrada="SOURCE_PATH"
pasta_de_saida="DESTINATION_PATH"
if [ ! -d "$pasta_de_entrada" ]; then
echo "A pasta '$pasta_de_entrada' não foi encontrada."
exit 1
fi
//
// URLProtocolMock.swift
// ComponentsTests
//
// Created by Tiago Oliveira on 19/02/25.
//
//
import Foundation

Ingredientes:

  • 2 xícaras (chá) de farinha de trigo
  • 2 colheres (sopa) de açúcar
  • 1 colher (sopa) de fermento em pó
  • 1/2 colher (chá) de sal
  • 2 ovos
  • 1 e 3/4 xícara (chá) de leite
  • 1/2 xícara (chá) de manteiga derretida
  • 1 colher (chá) de essência de baunilha (opcional)

A diferença entre Memory Zombie e Memory Leak está na forma como a memória é gerenciada e acessada no programa:

Memory Leak (Vazamento de Memória)

  • Ocorre quando a memória alocada dinamicamente não é liberada corretamente, resultando em uso excessivo de memória ao longo do tempo.
  • Isso pode acontecer quando um objeto ou recurso não é desalocado após o uso, deixando a memória inacessível, mas ainda ocupada.
  • Pode levar ao aumento do consumo de memória e, eventualmente, a falhas por falta de memória.
  • Em Swift, o ARC (Automatic Reference Counting) ajuda a evitar leaks, mas strong reference cycles (ciclos de referência fortes) podem causar esse problema, especialmente em closures e delegates.

Exemplo de Memory Leak em Swift:

public final class MultiListenerBindable<T> {
public typealias Handler = (T) -> Void
public typealias TargetHandler<Target> = (Target, T) -> Void
private var listeners: [UUID: Handler] = [:]
public var value: T {
didSet {
notifyListeners()
}
import Foundation
extension Bundle {
public static func mainBundle() -> Bundle {
guard let bundleIdentifier = ProcessInfo.processInfo.environment[MAIN_EXECUTABLE_BUNDLE_ID],
let mainBundle = Bundle(identifier: bundleIdentifier) else {
return Bundle.main
}
return mainBundle
#!/bin/sh
# Função para gerar uma senha aleatória com complexidade (mínimo 8 caracteres)
# Inclui: letras maiúsculas, letras minúsculas, números e caracteres especiais.
# Não deve conter caracteres repetidos ou consecutivos.
generate_password() {
length=${1:-8}
password=""
charset='A-Za-z0-9!@#%^&*()-_=+[]{}<>?~'
class AlertManager {
private var alertQueue: [UIAlertController] = []
private var isPresentingAlert = false
private let viewController: UIViewController
init(viewController: UIViewController) {
self.viewController = viewController
}
func showAlert(title: String, message: String, mainButtonTittle: String, handler: @escaping (() -> Void)) {