簡體   English   中英

迅速而客觀的橋梁

[英]bridging swift and objective-c

我有Objective-C項目,並在其中添加了swift文件。 我創建了橋文件,並在某些頭文件中導入了swift文件,沒有任何問題。

但是我需要通過將某些頭文件添加到"<project-name>-Bridging-Header.h"文件中來將它們導入到快速文件中。

如果我將頭文件放在該橋接文件中,並且此頭文件之前是導入的swift文件; Xcode給我錯誤消息:快速橋文件“找不到文件”。

即:

  • 我的項目名稱為:“ ProjectBlaBla”
  • 我有一個名為“ readingPage.h”的頭文件。
  • 我有一個名為“ readingSwift.swift”的swift文件。
  • swift橋文件的名稱:“ ProjectBlaBla-Swift.h”
  • 我創建了頭橋文件:“ ProjectBlaBla-Bridging-Header.h”
  • 我沒有問題地在“ readingPage.h”文件中導入了“ ProjectBlaBla-Swift.h”,並在objective-c中使用了swift類
  • 當我在“ ProjectBlaBla-Bridging-Header.h”中導入“ readingPage.h”時,在“ readingPage.h”中出現錯誤消息: "ProjectBlaBla-Swift.h file not found"

    有什么建議么 ?

謝謝

您無法直接或間接在-Bridging-Header.h文件中引用-Swift.h文件。

如果打開-Swift.h,您將在頂部附近看到一行,在我的情況下是99行: #import "/Users/.../...-Bridging-Header.h" ,意味着-Swift.h已經導入-Bridging-Header.h,因此導入回來會創建循環依賴項。

為了避免這種情況,您在-Bridging-Header.h中導入的任何標頭都必須使用對Swift類或它使用的協議的前向引用,如對此問題的回答所述

簡而言之,如果readingPage.h使用名為MySwiftClass的Swift類,則您應該:

  1. readingPage.h刪除對-Swift.h所有引用。
  2. 進口-Swift.hreadingPage.m
  3. 插入@class MySwiftClass; 在使用readingPage.h之前將其放到readingPage.h ,讓Objective-C知道該類存在並在其他地方聲明。

檢查橋接頭路徑是否正確。 在左側,選擇項目名稱->目標->構建設置->搜索Objective-C橋接標題。 請參閱下面的照片。

橋接頭

兩種選擇

  1. 在“ readingPage.m”文件而不是“ readingPage.h”文件中導入“ ProjectBlaBla-Swift.h”
  2. 創建一個名為“ Prefix.pch”的新PCH文件,然后在“ Prefix.pch”文件中導入“ ProjectBlaBla-Swift.h”。

注意:Prefix.pch是一個預編譯的頭文件,可加快編譯速度。 您不需要重新導入在prefix.ch文件中導入的任何文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM