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)
#endifPontes 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
- Scripts Swift (shebang do Swift) e ferramentas de linha de comando
- Interoperabilidade com C/Obj-C em resumo (sem especificidades do iOS)
- Empacotando binários com SPM