坑 OC裡面寫的屬性和方法在swift裡面無法訪問

2021-08-21 05:32:01 字數 535 閱讀 6670

背景: 專案裡面oc寫的檔案有個block屬性要在swift裡面訪問, 但是在swift裡面怎麼都無法訪問到屬性, 然後把block屬性加到oc的方法引數裡面,連方法也不能訪問了. 

思考: 第一直覺猜的是swift不支援oc的block了,但是仔細一想沒有道理, 就新建了乙個專案, 居然可以訪問block屬性和方法, 然後機智的想, 唯一的區別就是block的引數型別, 乙個是自定義的, 乙個是系統自帶的, 然後一看oc的標頭檔案, 用的是@class, 這個時候反應過來了, 多半是這裡的問題,把@class換成#import, 搞定可以訪問了.

總結:@class是標識有這麼個類但是沒有類的詳細資訊, #import包含了類的完整資訊, swift是橋接來訪問oc檔案的, 在橋接檔案裡面沒有加別的import所以這個@class表示的類, 找不到, 這才是原因. 換成import後了, swift本來橋接了模板oc檔案當然就可以訪問了. 寧外測試發現雖然oc裡面可以訪問這個block和方法, 但是一旦要呼叫那個自定義型別的屬性的時候依然是卵的, 所以還是要import那個檔案.

swift 的型別屬性和方法

型別屬性 使用關鍵字static來定義結構體和列舉的型別屬性,關鍵字class來為類定義型別屬性。語法 struct structname enum enumname class classname 類似於例項的屬性,型別屬性的訪問也是通過點運算子 來進行。但是,型別屬性是通過型別本身來獲取和設定,...

OC和Swift混編的一點小坑

首先 swift呼叫oc的類 乙個swift工程,當建立乙個oc類的時候 會出現這個提示,讓你建立乙個bridging header檔案。當然,如果你的類是從別的地方拖過來或其他情況的話,不要急,自己建立乙個就好了。命名方式 bridging header.h 檔案,是你的專案名稱 product ...

OC和Swift 定義屬性的一些對比

1.oc uiview alloc initwithframe initwith swift uiview frame 2.oc uicolor redcolor 類方法 swift uicolor.redcolor 3.oc 的列舉 uibuttontypecontactadd swift 中 u...