在 Xcode 6 中建立 Objective-C 專案,需創建三類文件:
OCTypeClass(.h/.m)SwiftFile1(勾選建立 Bridging Header)SwiftFile2(驗證跨文件訪問控制)// 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 類。
ProductModuleName-Swift.h(如 SwiftAndObjective-Swift.h)。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
Bridging-Header.h 導入 OC 頭文件。// SwiftFile2.swift
@objc public class PublicObjcTypeSwiftClass2: NSObject {
var property1: Int = 0
var ocClass: OCTypeClass = OCTypeClass()
func test() { ocClass.property1 = 0 }
}
編譯器會為每個 @objc Swift 類生成對應的 OC 接口,包含 @property、init 等,方便調試與理解映射關係。
@objc。private 類僅文件內可見。public 修飾。完整範例代碼下載:CSDN 下載