首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Swift 與 Objective-C 混合編程完整指南:類創建、互調與訪問控制

     編輯:關於C語言

專案建立與類定義

在 Xcode 6 中建立 Objective-C 專案,需創建三類文件:

  1. OC 類 OCTypeClass(.h/.m)
  2. Swift 類 SwiftFile1(勾選建立 Bridging Header)
  3. Swift 類 SwiftFile2(驗證跨文件訪問控制)

Swift 類定義與 @objc 標記

// SwiftFile1.swift
import Foundation
@objc public class PublicObjcTypeSwiftClass1: NSObject { var property1: Int = 0 }
@objc class ObjcTypeSwiftClass1: NSObject { var property1: Int = 0 }
@objc private class ObjcPrivateTypeSwiftClass1: NSObject { var property1: Int = 0 }
public class PublicSwiftClass1: NSObject { var property1: Int = 0 }
class SwiftClass1: NSObject { var property1: Int = 0 }
private class PrivateSwiftClass1: NSObject { var property1: Int = 0 }

規則:欲被 OC 可見,類必須繼承 NSObject 並標記 @objc;private 類僅限定義文件內部訪問;跨文件僅能訪問 public 類。

OC 調用 Swift

  1. 導入自動生成的 ProductModuleName-Swift.h(如 SwiftAndObjective-Swift.h)。
  2. 直接使用 alloc/init 實例化被 @objc 標記的類。
#import "OCTypeClass.h"
#import "SwiftAndObjective-Swift.h"

@implementation OCTypeClass
- (void)test {
    PublicObjcTypeSwiftClass1 *o1 = [[PublicObjcTypeSwiftClass1 alloc] init];
    ObjcTypeSwiftClass1 *o2 = [[ObjcTypeSwiftClass1 alloc] init];
}
@end

Swift 調用 OC

  1. 在 Bridging-Header.h 導入 OC 頭文件。
  2. Swift 中直接實例化 OC 類,無需額外導入。
// SwiftFile2.swift
@objc public class PublicObjcTypeSwiftClass2: NSObject {
    var property1: Int = 0
    var ocClass: OCTypeClass = OCTypeClass()
    func test() { ocClass.property1 = 0 }
}

Xcode 生成的 OC 模擬頭文件

編譯器會為每個 @objc Swift 類生成對應的 OC 接口,包含 @property、init 等,方便調試與理解映射關係。

總結要點

  • Swift 暴露給 OC 必須加 @objc。
  • private 類僅文件內可見。
  • 跨 Swift 文件訪問需 public 修飾。

完整範例代碼下載:CSDN 下載

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved