无法从 swift 控制器代码访问 Objective C 类
Posted
技术标签:
【中文标题】无法从 swift 控制器代码访问 Objective C 类【英文标题】:can't access Objective C class from swift controller code 【发布时间】:2020-11-10 08:30:41 【问题描述】:我得到一个未定义的符号:OBJC_CLASS$_Intro 在链接时尝试构建。
我可以使用 Xcode 的智能感知在 Xcode 的 swift 文件中访问类 Intro,但它似乎在构建时无法识别它。对 swift 和 Xcode 有更多经验的人可以帮帮我吗?
class OldLoginViewController: BaseViewController
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
NotificationCenter.default.addObserver(self, selector: #selector(OldLoginViewController.goIntro), name: NSNotification.Name("ROOTGOINTRO"), object: nil)
ClsUtil.skip(toViewController: self.navigationController!, viewControllerName: "Intro", isViewDidLoad: true)
var style : UIStatusBarStyle = UIStatusBarStyle.default;
@objc
override func viewDidAppear(_ animated: Bool)
let intro = Intro()
self.navigationController?.pushViewController(intro, animated:false)
Obj C 代码:
#import "BaseViewController.h"
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface Intro : BaseViewController
@end
NS_ASSUME_NONNULL_END
桥接头:
#ifndef ObjectiveCBridgingHeader_h
#define ObjectiveCBridgingHeader_h
#import "Base/Util/ClsUtil.h"
#import "Base/ViewController/BaseViewController.h"
#import "Intro/Intro.h"
#endif /* ObjectiveCBridgingHeader_h */
无需涉及介绍的代码即可正常构建并访问 ClsUtil,因此我假设在项目设置中正确设置了桥接头
ps - 原谅菜鸟。 ios 的第 4 天。之前的开发者离开了,我们没有开发者来处理与 iOS 相关的问题或完成之前的应用程序的移植。我想改用 swift 而不是 obj c,因为它看起来更干净/可以访问最新的工具。
【问题讨论】:
【参考方案1】:想通了。这是因为当我从 OS X finder 复制文件夹时,文件不会添加到项目设置的 Build Phases 选项卡的“Compile Sources”部分。
对于从另一个项目导入文件夹的正确方法是什么,我仍然有些困惑。我假设我需要使用某种 Xcode 命令而不是 OS X finder
【讨论】:
以上是关于无法从 swift 控制器代码访问 Objective C 类的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Swift 代码访问 Objective-C 单例的数组