C:n ja Objective-C:n yhteentoimivuus lyhyesti (ei iOS-erityispiirteitä)
Tuokaa C-järjestelmämoduuleja, kutsukaa yksinkertaisia POSIX- ja C-rajapintoja ja käyttäkää Foundation-siltoja (String/NSString, taulukot ja sanakirjat). Katsokaa, kuinka Objective-C:n NSError** muuttuu Swiftin throws -rakenteeksi.
C:n ja Objective-C:n yhteentoimivuus lyhyesti (ei iOS-erityispiirteitä) on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 3 oppituntia.
Yhteentoimivuuden yleiskuva
Tässä on nopea katsaus yhteentoimivuuteen:
- C: tuokaa järjestelmämoduuleja ja kutsukaa POSIX-apufunktioita
- Foundation: String/NSArray/NSDictionary-sillaukset
- NSError → Swiftin throws
C-tuonnit ja osoittimet
Swiftillä voi kutsua monia C-rajapintoja suoraan. Käyttäkää ehdollista importia siirrettävyyden varmistamiseksi ja muuntakaa char* käyttämällä String(cString:)-alustajaa.
// 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:n satunnaislukuesimerkki
Kutsukaa alustan C-funktioita, kuten arc4random_uniform-funktiota Applen järjestelmissä ja random()-funktiota Linuxissa. Pitäkää esimerkit pieninä ja siirrettävinä.
#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-sillaukset
Foundation-tyypit siltautuvat luontevasti: 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:n NSError**-parametrit tuodaan Swiftissä throws-muotoon. Käyttäkää try- ja do-catch-rakenteita – manuaalisia osoittimia ei tarvita.
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)
}Swiftin julkaiseminen Obj-C:lle
Merkitkää Swiftin API:t @objc/@objcMembers-attribuuteilla ja periyttäkää ne NSObject-tyypistä, jotta ne näkyvät Objective-C:lle sekakoodikannoissa.
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-sillauksen vastaus
Pikatarkistus: Miten NSError**-rajapinnat tuodaan?
Kertaus
Kertaus:
- Tuokaa Darwin/Glibc ja kutsukaa yksinkertaisia C-rajapintoja.
- Käyttäkää Foundation-sillauksia merkkijonoille ja kokoelmille.
- Objective-C:n NSError** vastaa Swiftissä throws-määrettä.
Opi Swift tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 122
- Oppitunnit
- 409
Usein kysytyt kysymykset
Onko oppitunti ”C:n ja Objective-C:n yhteentoimivuus lyhyesti (ei iOS-erityispiirteitä)” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “C:n ja Objective-C:n yhteentoimivuus lyhyesti (ei iOS-erityispiirteitä)”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 3 oppituntia.
Mitä opin oppitunnilla ”C:n ja Objective-C:n yhteentoimivuus lyhyesti (ei iOS-erityispiirteitä)”?
Tuokaa C-järjestelmämoduuleja, kutsukaa yksinkertaisia POSIX- ja C-rajapintoja ja käyttäkää Foundation-siltoja (String/NSString, taulukot ja sanakirjat). Katsokaa, kuinka Objective-C:n NSError** muut… Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/3.
Kuinka kauan ”C:n ja Objective-C:n yhteentoimivuus lyhyesti (ei iOS-erityispiirteitä)”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?
Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Swift-komentosarjat (swift shebang) ja komentorivityökalut
- C:n ja Objective-C:n yhteentoimivuus lyhyesti (ei iOS-erityispiirteitä)
- Binaarien paketointi SPM:llä