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 .
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)
#endifMosty 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.
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
- Skrypty Swift (swift shebang) i narzędzia wiersza poleceń
- Współpraca z C/Obj-C w skrócie (bez szczegółów iOS)
- Pakowanie plików binarnych za pomocą SPM