0Pricing
Swift Academy · Lektion

C-/Obj-C-Interop im Überblick (ohne iOS-spezifische Inhalte)

Importieren Sie C-Systemmodule, rufen Sie einfache POSIX-/C-APIs auf und verwenden Sie Foundation-Brücken (String/NSString, Arrays/Dictionaries). Sehen Sie, wie Objective-C NSError** zu Swift throws wird.

C-/Obj-C-Interop im Überblick (ohne iOS-spezifische Inhalte) ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Interop-Übersicht

Dies ist ein kurzer Überblick über Interop:

  • C: Systemmodule importieren und POSIX-Hilfsfunktionen aufrufen
  • Foundation: Brücken zwischen String/NSArray/NSDictionary
  • NSError → Swift-throws

C-Imports und Pointer

Swift kann viele C-APIs direkt aufrufen. Verwenden Sie bedingte Imports für Portabilität und konvertieren Sie char* mit 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)

C-Beispiel für Zufallszahlen

Rufen Sie plattformspezifische C-Funktionen auf (z. B. arc4random_uniform auf Apple-Plattformen und random() unter Linux). Halten Sie Beispiele klein und portabel.

#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

Foundation-Bridges

Foundation-Typen lassen sich natürlich überbrücken: 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

Objective-C-Parameter vom Typ NSError** werden als throws importiert. Verwenden Sie try/do-catch – manuelle Pointer sind nicht erforderlich.

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

Swift für Obj-C verfügbar machen

Kennzeichnen Sie Swift-APIs mit @objc/@objcMembers (und erben Sie von NSObject), damit sie in Objective-C in gemischten Codebasen sichtbar werden.

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.

Antwort zur NSError-Bridge

Kurzprüfung: Wie werden NSError**-APIs importiert?

Zusammenfassung

Zusammenfassung:

  • Importieren Sie Darwin/Glibc und rufen Sie einfache C-APIs auf.
  • Verwenden Sie Foundation-Bridges für Strings und Collections.
  • Objective-C-NSError** wird auf Swift-throws abgebildet.

Häufig gestellte Fragen

Ist die Lektion „C-/Obj-C-Interop im Überblick (ohne iOS-spezifische Inhalte)“ kostenlos?

Ja — der vollständige Text von „C-/Obj-C-Interop im Überblick (ohne iOS-spezifische Inhalte)“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „C-/Obj-C-Interop im Überblick (ohne iOS-spezifische Inhalte)“?

Importieren Sie C-Systemmodule, rufen Sie einfache POSIX-/C-APIs auf und verwenden Sie Foundation-Brücken (String/NSString, Arrays/Dictionaries). Sehen Sie, wie Objective-C NSError** zu Swift throws… Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 3.

Wie lange dauert die Lektion „C-/Obj-C-Interop im Überblick (ohne iOS-spezifische Inhalte)“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Swift-Skripte (Swift-Shebang), Kommandozeilenwerkzeuge
  2. C-/Obj-C-Interop im Überblick (ohne iOS-spezifische Inhalte)
  3. Binärdateien mit SPM paketieren
← Zurück zu Swift Academy