Swift Academy · Lekcja

Współpraca z C/Obj-C w skrócie (bez szczegółów iOS)

Importuj moduły systemowe C, wywołuj proste API POSIX/C i korzystaj z mostów Foundation (String/NSString, tablice/słowniki). Zobacz, jak Objective-C NSError** staje się Swiftowym throws .

Lekcja 2 z 38 kroki

Współpraca z C/Obj-C w skrócie (bez szczegółów iOS) to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 3 lekcji w sumie.

Mapa interoperacyjności

Oto krótkie omówienie interoperacyjności:

  • C: importowanie modułów systemowych i wywoływanie funkcji POSIX
  • Foundation: mosty dla String/NSArray/NSDictionary
  • NSError → Swift throws

Importowanie C i wskaźniki

Swift może bezpośrednio wywoływać wiele interfejsów API języka C. Dla przenośności należy używać warunkowego importu, a char* konwertować za pomocą 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)

Przykład losowania w C

Należy wywoływać platformowe funkcje C (np. arc4random_uniform w systemach Apple i random() w systemie Linux). Przykłady powinny być krótkie i przenośne.

#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

Mosty Foundation

Typy Foundation są naturalnie mostkowane: 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

Parametry NSError** z Objective-C są importowane jako throws. Należy używać try/do-catch — ręczne wskaźniki nie są potrzebne.

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

Udostępnianie Swift w Objective-C

Należy oznaczać interfejsy API języka Swift za pomocą @objc/@objcMembers (i dziedziczyć po NSObject), aby były widoczne dla Objective-C we wspólnych bazach kodu.

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.

Odpowiedź dotycząca mostkowania NSError

Szybkie sprawdzenie: Jak importowane są interfejsy API z NSError**?

Podsumowanie

Podsumowanie:

  • Należy importować Darwin/Glibc i wywoływać proste interfejsy API C.
  • Należy używać mostów Foundation dla ciągów znaków i kolekcji.
  • Obiektowe NSError** jest mapowane na swiftowe throws.
Bezpłatny start

Ucz się Swift dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
122
Lekcje
409

Często zadawane pytania

Czy lekcja „Współpraca z C/Obj-C w skrócie (bez szczegółów iOS)” jest bezpłatna?

Tak — pełny tekst „Współpraca z C/Obj-C w skrócie (bez szczegółów iOS)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Współpraca z C/Obj-C w skrócie (bez szczegółów iOS)”?

Importuj moduły systemowe C, wywołuj proste API POSIX/C i korzystaj z mostów Foundation (String/NSString, tablice/słowniki). Zobacz, jak Objective-C NSError** staje się Swiftowym throws . Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 3.

Ile czasu zajmuje lekcja „Współpraca z C/Obj-C w skrócie (bez szczegółów iOS)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Skrypty Swift (swift shebang) i narzędzia wiersza poleceń
  2. Współpraca z C/Obj-C w skrócie (bez szczegółów iOS)
  3. Pakowanie plików binarnych za pomocą SPM
← Powrót do Swift Academy