0Pricing
Swift Academy · Aula

Interoperabilidade com C/Obj-C em resumo (sem especificidades do iOS)

Importe módulos de sistema C, chame APIs POSIX/C simples e use bridges do Foundation (String/NSString, arrays/dicionários). Veja como NSError** do Objective-C se torna throws no Swift.

Interoperabilidade com C/Obj-C em resumo (sem especificidades do iOS) é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 3 aulas no total.

Visão geral da interoperabilidade

Esta é uma introdução rápida à interoperabilidade:

  • C: importe módulos do sistema e chame auxiliares POSIX
  • Foundation: pontes para String/NSArray/NSDictionary
  • NSError → throws do Swift

Importações de C e ponteiros

Swift pode chamar muitas APIs de C diretamente. Use uma importação condicional para obter portabilidade e converta char* com String(cString:).

// Import the platform C module: Darwin (Apple) or Glibc (Linux)
#if canImport(Darwin)
import Darwin
#else
import Glibc
#endif

// Use C getenv (returns C pointer) and strlen
if let cPtr = getenv("USER") {
    let name = String(cString: cPtr)   // bridge C char* -> Swift String
    print("Hello,", name)
} else {
    print("Hello, anonymous")
}

// strlen works on C strings:
let cString: [CChar] = Array("swift".utf8).map { CChar($0) } + [0]
let len = strlen(cString)
print("strlen(s) =", len)

Exemplo de aleatoriedade em C

Chame funções de C da plataforma, como arc4random_uniform nos sistemas Apple e random() no Linux. Mantenha os exemplos pequenos e portáteis.

#if canImport(Darwin)
import Darwin
let r = arc4random_uniform(100)      // 0..99
print("random:", r)
#else
import Glibc
let r = UInt32(random() % 100)       // 0..99 (demo)
print("random:", r)
#endif

Pontes do Foundation

Os tipos do Foundation fazem pontes naturalmente: String⇄NSString, [Any]⇄NSArray, [Key:Any]⇄NSDictionary.

import Foundation

// String ↔ NSString bridge is seamless
let swiftString: String = "hello"
let ns: NSString = swiftString as NSString
print(ns.uppercased)           // via NSString API
let back: String = ns as String
print(back + " world")

// NSArray / NSDictionary bridge to Swift collections
let nsArray: NSArray = ["a", "b", "c"]
let swiftArray = nsArray as! [String]
print(swiftArray.joined(separator: ","))

let nsDict: NSDictionary = ["lang": "Swift", "year": 2014]
let swiftDict = nsDict as! [String: Any]
print(swiftDict["lang"] as? String ?? "-")

NSError → lançamento de erros

Os parâmetros NSError** do Objective-C são importados como throws. Use try/do-catch — não são necessários ponteiros manuais.

import Foundation

// Many Obj-C methods that take NSError** are imported as throwing in Swift.
let fm = FileManager.default

// Create a temporary file, then remove it with "try".
let tmp = (NSTemporaryDirectory() as NSString).appendingPathComponent("demo.txt")
FileManager.default.createFile(atPath: tmp, contents: Data("hi".utf8), attributes: nil)

do {
    try fm.removeItem(atPath: tmp)          // was NSError** in Obj-C → throws in Swift
    print("removed ok")
} catch {
    print("remove failed:", error)
}

Expor Swift ao Objective-C

Anote APIs Swift com @objc/@objcMembers (e herde de NSObject) para torná-las visíveis ao Objective-C em bases de código mistas.

import Foundation

@objcMembers
class Adder: NSObject {
    dynamic var last: Int = 0
    @objc func add(_ a: Int, _ b: Int) -> Int { last = a + b; return last }
}

let a = Adder()
print(a.add(2, 3))  // 5
print(a.last)       // 5
// In mixed projects, Obj-C can call Adder via the generated Swift header.

Resposta sobre a integração com NSError

Verificação rápida: Como as APIs NSError** são importadas?

Recapitulação

Recapitulação:

  • Importe Darwin/Glibc e chame APIs simples de C.
  • Use as pontes do Foundation para strings e coleções.
  • NSError** do Objective-C corresponde a throws no Swift.

Perguntas Frequentes

A aula “Interoperabilidade com C/Obj-C em resumo (sem especificidades do iOS)” é grátis?

Sim — o texto completo de “Interoperabilidade com C/Obj-C em resumo (sem especificidades do iOS)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 3 aulas no total.

O que vou aprender em “Interoperabilidade com C/Obj-C em resumo (sem especificidades do iOS)”?

Importe módulos de sistema C, chame APIs POSIX/C simples e use bridges do Foundation (String/NSString, arrays/dicionários). Veja como NSError** do Objective-C se torna throws no Swift. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 3.

Quanto tempo leva a aula “Interoperabilidade com C/Obj-C em resumo (sem especificidades do iOS)”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Scripts Swift (shebang do Swift) e ferramentas de linha de comando
  2. Interoperabilidade com C/Obj-C em resumo (sem especificidades do iOS)
  3. Empacotando binários com SPM
← Voltar para Swift Academy