Взаимодействие с C и Objective-C вкратце (без особенностей iOS)
Импортируйте системные модули C, вызывайте простые API POSIX и C и используйте мосты Foundation (String/NSString, массивы и словари). Узнайте, как NSError** из Objective-C преобразуется в throws Swift.
«Взаимодействие с C и Objective-C вкратце (без особенностей iOS)» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.
Карта взаимодействия
Краткий обзор взаимодействия:
- C: импортируйте системные модули и вызывайте вспомогательные функции POSIX
- Foundation: интеграция String/NSArray/NSDictionary
- NSError → Swift выбрасывает ошибки
Импорты C и указатели
Swift может напрямую вызывать многие API C. Используйте условительный импорт для переносимости и преобразуйте char* с помощью 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
Вызывайте платформенные функции C, например arc4random_uniform в Apple-системах и random() в Linux. Делайте примеры небольшими и переносимыми.
#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
Типы Foundation естественным образом интегрируются: 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 → выбрасывание ошибок
Параметры Objective-C NSError** импортируются как выбрасывающие ошибки. Используйте try/do-catch — ручные указатели не нужны.
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 в Obj-C
Помечайте API Swift аннотациями @objc/@objcMembers и наследуйте их от NSObject, чтобы сделать их видимыми для Objective-C в смешанных кодовых базах.
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.Ответ: интеграция NSError
Быстрая проверка: как импортируются API NSError**?
Итоги
Итоги:
- Импортируйте Darwin/Glibc и вызывайте простые API C.
- Используйте интеграцию Foundation для строк и коллекций.
- Objective-C NSError** преобразуется в Swift с выбрасыванием ошибок.
Изучай Swift с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 122
- Уроки
- 409
Часто задаваемые вопросы
Урок «Взаимодействие с C и Objective-C вкратце (без особенностей iOS)» бесплатный?
Да — полный текст урока «Взаимодействие с C и Objective-C вкратце (без особенностей iOS)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.
Чему я научусь в уроке «Взаимодействие с C и Objective-C вкратце (без особенностей iOS)»?
Импортируйте системные модули C, вызывайте простые API POSIX и C и используйте мосты Foundation (String/NSString, массивы и словари). Узнайте, как NSError** из Objective-C преобразуется в throws Swif… Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.
Сколько времени занимает урок «Взаимодействие с C и Objective-C вкратце (без особенностей iOS)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Скрипты Swift (shebang Swift) и инструменты командной строки
- Взаимодействие с C и Objective-C вкратце (без особенностей iOS)
- Упаковка двоичных файлов с помощью SPM