我看了很多關于這個問題的帖子,它通常是圍繞著在.h或.m中缺少一個匯入而展開的。
在我的案例中,我試圖匯入一個 swift 目標 C 函式,但我相信 .h、.m 和 swift 檔案都配置正確(正如生成的 swift-header)。
我的 Swift 類被標記為 @objc 并擴展了 NSObject。
當我在.h中使用前向宣告匯入該類,并在.m中使用MyApp.h匯入,它可以看到該類。然而,它不能看到我想要的方法,并且給我錯誤的提示 Receiver type 'class' for instance message is a forward declaration.
當我檢查生成的頭檔案時,該方法是在那里生成的(并且該方法被標記為@objc,并回傳一個@objc兼容值)。
你能建議什么可能導致這個問題嗎?
以下是我的代碼參考:
Swift
@objc class ObjcHelper: NSObject {
@objc static let shared = ObjcHelper()
@objc public func getObjcFromNSString(nsString: NSString) -> ObjcType {
return ObjcType()
}
}
在我想使用它的目標c檔案的.h中:
@class ObjcHelper
而在.m中,我正在匯入應用程式的頭檔案
#import <App-Swift.h>
當我嘗試使用.m檔案中的代碼時,編譯器可以很好地看到這部分:
[ObjcHelper shared] // Compiler sees this fine!
但是如果我試圖呼叫這個方法,即使我輸入了它,它也不會自動完成或找到它。
如果我看一下生成的標題,我看到這個方法在這里,就像這樣:
SWIFT_CLASS("_TC7ObjcHelper")
@interface ObjcHelper : NSObject
SWIFT_CLASS_PROPERTY(@property(nonatomic,class,readonly,strong) ObjcHelper * _Nonnull共享;)
(ObjcHelper * _Nonnull)share SWIFT_WARN_UNUSED_RESULT。
- (enum ObjcType)getObjcFromNSStringWithNsString:(NSString * _Nonnull)nsString SWIFT_WARN_UNUSED_RESULT;
- (Nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER。
@end>
我期望作業的代碼并不作業,如下(并產生錯誤):
ObjcType value = [[ObjcHelper shared] getObjcFromNSStringWithNsString: @"abc"]];
uj5u.com熱心網友回復:
這個問題相當微妙,但似乎已經解決了。
在我的專案中,有許多目標,而對于ObjcHelper來說,它并沒有針對其中一個目標。我相信發生的情況是,即使創建了橋接的 objective c 輔助檔案,也有一個問題,即參考缺少一個 "必需的 "目標所有者,而這個錯誤會傳播到前面,即無法找到該類。
因此,如果你遇到這個問題,請檢查以確保你試圖帶入objective-c的Swift類的目標成員設定為它所需要的所有目標(否則你可能會得到一個關于前進類宣告的誤導性錯誤)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/307445.html
標籤:
