无法在目标 c 中使用类(swift)
Posted
技术标签:
【中文标题】无法在目标 c 中使用类(swift)【英文标题】:Unable to use class(swift) into objective c 【发布时间】:2015-11-23 05:55:41 【问题描述】:我正在执行苹果文档中编写的相同步骤。但我无法访问目标 c 文件中的 swift 类。
代码:
Swift 文件
import Foundation
import UIKit
@objc class checkk : UIViewController
func alertView ()
let al = UIAlertView(title: "HeLLo", message: "Working", delegate: nil, cancelButtonTitle: "OK", otherButtonTitles: "ww", "sdd")
al.show()
Objective C 文件
#import "ViewController.h"
#import "SwiftIntoObjectiveC-Bridging-Header.h" // automatically generated by Xcode. Nothing is written in this.
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
checkk *ck =[checkk new]; // error : use of undeclared identifier check.
// Do any additional setup after loading the view, typically from a nib.
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
- (IBAction)Click:(id)sender
@end
错误: 使用未声明的标识符检查。
【问题讨论】:
尝试使用 checkk *ck = [[checkk alloc] init]; 你的错误意味着你是#import
任何地方的checkk类
你忘记在 ViewController 中实现 #import "checkk-Swift.h"
【参考方案1】:
在 Objective-C 中,用于访问 Swift 类的导入如下所示:
#import "YOUR_APP_NAME-Swift.h"
YOUR_APP_NAME 实际上是目标的模块名称,但通常与您的应用相同。
该文件包含 Objective-C 访问 Swift 中定义的符号所需的 Swift 原型。
在您的情况下,您的模块名称可能是 SwiftIntoObjectiveC
并且您可以使用
#import "SwiftIntoObjectiveC-Swift.h"
桥接头永远不会导入到 Objective-C 中,因为它不被 Objective-C 端使用,并且只用于在 Swift 端访问 Objective-C 符号。
【讨论】:
不能通过更改桥接头名称来工作。 @丹尼尔。 不要更改桥接头名称。将导入更改为#import "YOUR_APPS_MODULE_NAME-Swift.h"
。【参考方案2】:
另外,请确保编译器可以找到您的桥接头,在大多数情况下,您的桥接头路径可能是问题所在。
这是文档的link
【讨论】:
【参考方案3】: 在func alertView()
之前添加@objc
添加这一行 #import "YourAppName-Swift.h"
而不是 #import "SwiftIntoObjectiveC-Bridging-Header.h"
【讨论】:
以上是关于无法在目标 c 中使用类(swift)的主要内容,如果未能解决你的问题,请参考以下文章
Swift 中的单元测试 | IOS 故事板 |无法转换目标 c 中定义的视图控制器类
尽管桥接头工作正常,但无法在 Swift 中实例化 Obj C 类