C/Obj-C birlikte çalışabilirliğine genel bakış (iOS ayrıntıları yok)
C sistem modüllerini içe aktarın, basit POSIX/C API'lerini çağırın ve Foundation köprülerini (String/NSString, diziler/sözlükler) kullanın. Objective-C NSError** değerinin Swift'te nasıl throws hâline geldiğini görün.
C/Obj-C birlikte çalışabilirliğine genel bakış (iOS ayrıntıları yok), CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 3 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 3 dersten oluşur.
Birlikte çalışabilirlik haritası
Birlikte çalışabilirliğe hızlı bir bakış:
- C: sistem modüllerini içe aktarın ve POSIX yardımcılarını çağırın
- Foundation: String/NSArray/NSDictionary köprüleri
- NSError → Swift throws
C içe aktarmaları ve işaretçiler
Swift, birçok C API'sini doğrudan çağırabilir. Taşınabilirlik için koşullu içe aktarma kullanın ve char* değerini String(cString:) ile dönüştürün.
// 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 ile rastgele değer örneği
Platforma özgü C işlevlerini çağırın (örneğin Apple'da arc4random_uniform, Linux'ta random()). Örnekleri küçük ve taşınabilir tutun.
#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)
#endifFoundation köprüleri
Foundation türleri doğal biçimde köprülenir: 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 NSError** parametreleri throws olarak içe aktarılır. try/do-catch kullanın; manuel işaretçilere gerek yoktur.
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'i Obj-C'ye açma
Swift API'lerini, karışık kod tabanlarında Objective-C tarafından görünür kılmak için @objc/@objcMembers ile işaretleyin ve NSObject'tan kalıtım alın.
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 köprüleme yanıtı
Hızlı kontrol: NSError** API'leri nasıl içe aktarılır?
Özet
Özet:
- Darwin/Glibc'i içe aktarın ve basit C API'lerini çağırın.
- Dizeler ve koleksiyonlar için Foundation köprülerini kullanın.
- Objective-C NSError**, Swift'te throws ile eşleşir.
Yapay zeka eğitmeniyle Swift öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 122
- Dersler
- 409
Sıkça Sorulan Sorular
“C/Obj-C birlikte çalışabilirliğine genel bakış (iOS ayrıntıları yok)” dersi ücretsiz mi?
Evet — “C/Obj-C birlikte çalışabilirliğine genel bakış (iOS ayrıntıları yok)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 3 dersten oluşur.
“C/Obj-C birlikte çalışabilirliğine genel bakış (iOS ayrıntıları yok)” dersinde ne öğreneceğim?
C sistem modüllerini içe aktarın, basit POSIX/C API'lerini çağırın ve Foundation köprülerini (String/NSString, diziler/sözlükler) kullanın. Objective-C NSError** değerinin Swift'te nasıl throws hâlin… Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 2. dersidir.
“C/Obj-C birlikte çalışabilirliğine genel bakış (iOS ayrıntıları yok)” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Swift betikleri (swift shebang) ve komut satırı araçları
- C/Obj-C birlikte çalışabilirliğine genel bakış (iOS ayrıntıları yok)
- SPM ile ikili dosyaları paketleme