简体   繁体   English

尽管桥接头工作正常,但无法在 Swift 中实例化 Obj C 类

[英]Can't Instantiate Obj C Class in Swift in spite of working bridging header

I'm working on pulling a single objective c class into swift.我正在努力将单个目标 c 类拉入 swift。 I've got my bridging header working just fine- Xcode is even suggesting the obj c class's name when I type it.我的桥接头工作得很好 - Xcode 甚至在我输入 obj c 类时建议它的名称。 I've even managed to reference a delegate protocol in the same header file from my swift file:我什至设法从我的 swift 文件中引用了同一个头文件中的委托协议:

BrowserViewController.swift BrowserViewController.swift

import UIKit

class BrowserViewController: UIViewController, BrowserTabViewDelegate {

    @IBOutlet weak var browserView: UIView!
    @IBOutlet weak var webViewContainer: UIView!


    override func viewDidLoad() {
        super.viewDidLoad()

        let tabview: BrowserTabView = BrowserTabView();
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

Sreen cap of the error: Use of unresolved identifier 'BrowserTabView'.错误的屏幕上限:使用未解析的标识符“BrowserTabView”。 Note that the BrowserTabViewDelegate isn't having any problems with being referenced.请注意, BrowserTabViewDelegate被引用没有任何问题。 It comes from the same obj c header as the BrowserTabView.它来自与 BrowserTabView 相同的 obj c 标头。 It suggests the class name, but I can't call init on it.它建议类名,但我不能调用 init 。

BrowserTabView.h浏览器TabView.h

#import <UIKit/UIKit.h>
@class BrowserTabView;

@protocol BrowserTabViewDelegate <NSObject>

@optional

-(void)BrowserTabView:(BrowserTabView *)browserTabView didSelectTabAtIndex:(NSUInteger)index;
-(void)BrowserTabView:(BrowserTabView *)browserTabView willRemoveTabAtIndex:(NSUInteger)index;
-(void)BrowserTabView:(BrowserTabView *)browserTabView didRemoveTabAtIndex:(NSUInteger)index;
-(void)BrowserTabView:(BrowserTabView *)browserTabView exchangeTabAtIndex:(NSUInteger)index withTabAtIndex:(NSUInteger)toIndex;
-(BOOL)BrowserTabView:(BrowserTabView *)tabView shouldChangeTitle: (NSString*)title;

@end

@interface BrowserTabView : UIView <UIGestureRecognizerDelegate, UITextFieldDelegate>

@property (nonatomic, strong) UIImage *backgroundImage;
@property (nonatomic, readonly) NSUInteger numberOfTabs;
@property (nonatomic, readonly) NSInteger selectedTabIndex;

@property (nonatomic, readonly) NSMutableArray *reuseQueue;
@property (nonatomic, weak) id<BrowserTabViewDelegate> delegate;

-(id)initwithTabTitles:(NSArray *)titles andDelegate:(id)del;
-(void)addTabWithTitle:(NSString *)title;
-(void)setTabTitlesWithArray:(NSArray *)titles;
-(void)setSelectedTabIndex:(NSInteger)selectedTabIndex animated:(BOOL)animation;
-(void)removeTabAtIndex:(NSInteger)index animated:(BOOL)animated;
- (void)handleLongPress:(UILongPressGestureRecognizer *)gr;
- (void)handlePanGesture:(UIPanGestureRecognizer *)sender;


@end

This is the first time I've been stuck for this long on an issue like this... Most of the existing questions I've seen have to do with bad bridging headers- but I'm pretty certain mine is good.这是我第一次在这样的问题上被困这么长时间......我看到的大多数现有问题都与糟糕的桥接标题有关 - 但我很确定我的问题很好。 Let me know if I can clean up my question, and thanks in advance for any help.让我知道我是否可以解决我的问题,并提前感谢您的帮助。

WI Vision-Bridging-Header.h WI Vision-Bridging-Header.h

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
#import "BrowserTabView.h"
#import "BrowserTab.h"

Such a nice issue.这么好的问题。 That looks like a bug and we can log it to Swift's community.这看起来像是一个错误,我们可以将其记录到 Swift 的社区。 Changing the delegate following way will help you:以下方式更改委托将帮助您:

@protocol BrowserTabViewDelegate <NSObject>

@optional

-(void)browserTabView:(BrowserTabView *)browserTabView didSelectTabAtIndex:(NSUInteger)index;
-(void)browserTabView:(BrowserTabView *)browserTabView willRemoveTabAtIndex:(NSUInteger)index;
-(void)browserTabView:(BrowserTabView *)browserTabView didRemoveTabAtIndex:(NSUInteger)index;
-(void)browserTabView:(BrowserTabView *)browserTabView exchangeTabAtIndex:(NSUInteger)index withTabAtIndex:(NSUInteger)toIndex;
-(BOOL)browserTabView:(BrowserTabView *)tabView shouldChangeTitle: (NSString*)title;

@end

There should be browserTabView used instead of BrowserTabView in the methods names.方法名称中应该使用browserTabView而不是BrowserTabView

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM