Pular para o conteúdo
Skillpedia
Código em geral48 mil · #4286

swift

Ajuda seu agente a desenvolver apps para iOS usando Swift. Essencial para criar aplicativos nativos para iPhones e iPads. Permite construir interfaces e funcionalidades modernas.

O que ela faz

Este guia ensina como escrever código Swift de forma mais eficiente e correta, seguindo as melhores práticas da linguagem. Ele mostra como usar recursos como 'Optionals' e 'Concorrência' de maneira eficaz.

Quando usar

  • ✓Quando você quer escrever código Swift mais limpo e seguro.
  • ✓Para aprender as formas recomendadas de lidar com valores que podem ou não existir (Optionals).
  • ✓Ao trabalhar com tarefas que acontecem ao mesmo tempo (Concorrência).

Exemplo do que pedir para a IA

“Como posso garantir que meu código Swift lide corretamente com valores que podem não existir?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/super-code/swift/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/super-code/swift/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O guia compara exemplos de código 'ruim' com exemplos 'bons' para ilustrar as melhores práticas. Ele foca em como usar as ferramentas da linguagem Swift de forma mais inteligente para evitar erros comuns.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add sickn33/agentic-awesome-skills --skill swift

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/super-code/swift/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Swift: Referência de Eficiência Idiomática

Quando Usar

  • Use esta habilidade quando a tarefa corresponder a esta descrição: Diretrizes de supercódigo específicas da linguagem para Swift.

Índice

  1. Opcionais
  2. Coleções e Transformações Funcionais
  3. Tipos de Valor vs. Tipos de Referência
  4. Tratamento de Erros
  5. Concorrência
  6. Design Orientado a Protocolos
  7. Antipadrões Específicos do Swift

1. Opcionais {#optionals}

// ❌ Force unwrap
let name = user.name!

// ✅ — guard or if-let
guard let name = user.name else { return }
// ❌ Nested if-let pyramid
if let user = fetchUser() {
    if let address = user.address {
        if let city = address.city {
            display(city)
        }
    }
}

// ✅ — chained optional binding
if let city = fetchUser()?.address?.city {
    display(city)
}
// or guard-let for early exit
guard let city = fetchUser()?.address?.city else { return }
display(city)
// ❌ Ternary for default
let name = user.name != nil ? user.name! : "Unknown"

// ✅
let name = user.name ?? "Unknown"
// ❌ Optional map when if-let is clearer for side effects
user.name.map { display($0) }

// ✅ — map for transforms, if-let for side effects
let upper = user.name.map { $0.uppercased() }
if let name = user.name { display(name) }

2. Coleções e Transformações Funcionais {#collections}

// ❌ Imperative filter + map
var result: [String] = []
for item in items {
    if item.isActive { result.append(item.name.uppercased()) }
}

// ✅
let result = items
    .filter(\.isActive)
    .map { $0.name.uppercased() }
// ❌ Manual dictionary construction
var dict: [String: User] = [:]
for user in users { dict[user.id] = user }

// ✅
let dict = Dictionary(uniqueKeysWithValues: users.map { ($0.id, $0) })
// or with possible duplicates:
let dict = Dictionary(grouping: users, by: \.department)
// ❌ Checking isEmpty then accessing first
if !items.isEmpty { process(items[0]) }

// ✅
if let first = items.first { process(first) }
// ❌ Index-based loop
for i in 0..<items.count { process(items[i]) }

// ✅
for item in items { process(item) }
// with index:
for (i, item) in items.enumerated() { process(i, item) }

Use caminhos de chave (\.isActive) como atalhos de closure onde suportado.


3. Tipos de Valor vs. Tipos de Referência {#value-types}

// ❌ Class for plain data (reference semantics where value semantics suffice)
class Point {
    var x: Double
    var y: Double
    init(x: Double, y: Double) { self.x = x; self.y = y }
}

// ✅
struct Point { var x, y: Double }
// ❌ Large struct copied repeatedly (performance hit)
struct HugeData { var buffer: [UInt8] /* thousands of elements */ }
func process(_ data: HugeData) { ... } // copies entire buffer

// ✅ — use class or pass inout for mutation
func process(_ data: inout HugeData) { ... }
// or use copy-on-write wrapper for large value types

Use por padrão struct. Use class quando precisar de identidade, herança ou semântica de referência.


4. Tratamento de Erros {#errors}

// ❌ Using optionals to mask errors
func parse(_ input: String) -> Data? { ... } // caller doesn't know why it failed

// ✅
func parse(_ input: String) throws -> Data { ... }
// ❌ try! in production code
let data = try! JSONDecoder().decode(User.self, from: jsonData)

// ✅
do {
    let data = try JSONDecoder().decode(User.self, from: jsonData)
} catch {
    logger.error("decode failed: \(error)")
    throw AppError.decodingFailed(underlying: error)
}
// ❌ Generic Error type
enum AppError: Error { case generic(String) }

// ✅ — specific, actionable error cases
enum AppError: Error {
    case networkUnreachable
    case invalidInput(field: String, reason: String)
    case unauthorized
}
// ❌ Catching all errors and ignoring
do { try riskyOperation() } catch { }

// ✅
do {
    try riskyOperation()
} catch let error as NetworkError {
    handleNetworkError(error)
} catch {
    throw error // rethrow unknown
}

5. Concorrência {#concurrency}

// ❌ Assíncrono baseado em callback (pirâmide da perdição)
fetchUser { user in
    fetchPosts(for: user) { posts in
        fetchComments(for: posts.first!) { comments in
            display(comments)
        }
    }
}

// ✅ (Swift 5.5+)
let user = try await fetchUser()
let posts = try await fetchPosts(for: user)

…
Perguntas frequentes

O que são 'Optionals' em Swift?

'Optionals' são uma forma em Swift de dizer que uma variável pode ter um valor ou pode não ter nenhum valor (ser nula). O guia mostra como lidar com isso de forma segura.

O que é 'Concorrência' em Swift?

'Concorrência' é a capacidade de executar múltiplas tarefas ao mesmo tempo. O guia explica como fazer isso de forma eficiente em Swift usando as ferramentas mais recentes.

Por que usar 'structs' em vez de 'classes' em Swift?

Geralmente, 'structs' são preferíveis em Swift para dados simples porque funcionam com cópia (valor), o que pode ser mais seguro e previsível. 'Classes' são usadas quando você precisa de compartilhamento e identidade.

Detalhes

Descrição original do autor

Language-specific super-code guidelines for swift.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#4286
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas