0Pricing
Swift Academy · レッスン

C/Obj-C相互運用の概要(iOS固有の内容なし)

Cのシステムモジュールをインポートし、シンプルなPOSIX/C APIを呼び出します。Foundationのブリッジ(String/NSString、配列/辞書)も使います。Objective-Cの NSError** がSwiftの throws になる仕組みを確認します。

「C/Obj-C相互運用の概要(iOS固有の内容なし)」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全3レッスンが含まれています。

相互運用マップ

ここでは相互運用について簡単に見ていきます:

  • C:システムモジュールをインポートしてPOSIXヘルパーを呼び出します
  • Foundation:String/NSArray/NSDictionaryのブリッジ
  • NSError → Swiftのthrows

Cのインポートとポインター

Swiftから多くのC APIを直接呼び出せます。移植性のために条件付きインポートを使い、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関数(Appleではarc4random_uniform、Linuxではrandom()など)を呼び出します。例は小さく、移植性のあるものにしてください。

#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 → throws

Objective-CのNSError**パラメーターはthrowsとしてインポートされます。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に公開する

Swift APIに@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ブリッジの回答

確認問題:NSError** APIはどのようにインポートされますか?

まとめ

まとめ:

  • Darwin/Glibcをインポートして、単純なC APIを呼び出します。
  • 文字列やコレクションにはFoundationのブリッジを使います。
  • Objective-CのNSError**はSwiftのthrowsに対応します。

よくある質問

「C/Obj-C相互運用の概要(iOS固有の内容なし)」レッスンは無料ですか?

はい。「C/Obj-C相互運用の概要(iOS固有の内容なし)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全3レッスンが含まれています。

「C/Obj-C相互運用の概要(iOS固有の内容なし)」で何を学びますか?

Cのシステムモジュールをインポートし、シンプルなPOSIX/C APIを呼び出します。Foundationのブリッジ(String/NSString、配列/辞書)も使います。Objective-Cの NSError** がSwiftの throws になる仕組みを確認します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。

「C/Obj-C相互運用の概要(iOS固有の内容なし)」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Swiftスクリプト(swift shebang)とコマンドラインツール
  2. C/Obj-C相互運用の概要(iOS固有の内容なし)
  3. SPMでバイナリをパッケージ化する
← Swift Academyに戻る