0Pricing
Swift Academy · Lezione

Interoperabilità C/Obj-C in sintesi (senza dettagli iOS)

Importi i moduli di sistema C, chiami semplici API POSIX/C e utilizzi i bridge di Foundation (String/NSString, array/dizionari). Scopra come NSError** di Objective-C diventa throws in Swift.

Interoperabilità C/Obj-C in sintesi (senza dettagli iOS) è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 2 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 3 lezioni in totale.

Mappa dell'interoperabilità

Questa è una breve panoramica dell'interoperabilità:

  • C: importi i moduli di sistema e chiami gli helper POSIX
  • Foundation: bridge tra String/NSArray/NSDictionary
  • NSError → Swift throws

Import C e puntatori

Swift può chiamare direttamente molte API C. Usi l'import condizionale per la portabilità e converta char* con 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)

Esempio di numeri casuali in C

Chiami le funzioni C della piattaforma (ad esempio arc4random_uniform su Apple e random() su Linux). Mantenga gli esempi brevi e portabili.

#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

Bridge con Foundation

I tipi Foundation si convertono 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 → throws

I parametri NSError** di Objective-C vengono importati come throws. Usi try/do-catch: non servono puntatori manuali.

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)
}

Esporre Swift a Obj-C

Annoti le API Swift con @objc/@objcMembers (ed erediti da NSObject) per renderle visibili a Objective-C nei codebase misti.

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.

Risposta sul bridge di NSError

Verifica rapida: Come vengono importate le API NSError**?

Riepilogo

Riepilogo:

  • Importi Darwin/Glibc e chiami semplici API C.
  • Usi i bridge di Foundation per stringhe e collezioni.
  • NSError** di Objective-C viene convertito in throws di Swift.

Domande Frequenti

La lezione «Interoperabilità C/Obj-C in sintesi (senza dettagli iOS)» è gratuita?

Sì — il testo completo di «Interoperabilità C/Obj-C in sintesi (senza dettagli iOS)» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 3 lezioni in totale.

Cosa imparerò in «Interoperabilità C/Obj-C in sintesi (senza dettagli iOS)»?

Importi i moduli di sistema C, chiami semplici API POSIX/C e utilizzi i bridge di Foundation (String/NSString, array/dizionari). Scopra come NSError** di Objective-C diventa throws in Swift. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 3.

Quanto tempo richiede la lezione «Interoperabilità C/Obj-C in sintesi (senza dettagli iOS)»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Script Swift (shebang Swift) e strumenti da riga di comando
  2. Interoperabilità C/Obj-C in sintesi (senza dettagli iOS)
  3. Creare pacchetti binari con SPM
← Torna a Swift Academy