【发布时间】:2017-02-19 18:34:24
【问题描述】:
我看过很多关于这个主题的帖子,但我仍然看不出我做错了什么。我在objective-c 中有一个视图控制器,它试图在Swift 中访问NSObject 代码sn-p。我有调试模块YES和objective-c Bridging Header 和 Swift 标头位于 Build Settings 中的正确位置。以下是代码的相关部分:
View Controller.m
//
// ViewController.m
// swiftTest
//
// Created by Nelson Capes on 2/19/17.
// Copyright © 2017 Nelson Capes. All rights reserved.
//
#import "ViewController.h"
#import "swiftTest-Swift.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
MyClass
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
Swift 代码:
//
// MyClass.swift
// swiftTest
//
// Created by Nelson Capes on 2/19/17.
// Copyright © 2017 Nelson Capes. All rights reserved.
//
import Foundation
@objc public class MyClass:NSObject{
var property:String = ""
func method() {
print(self.property)
}
}
在 ViewController.m 中,开始键入 MyClass 会收到来自编译器的以下警告:
/Users/nelson/swiftTest/swiftTest/ViewController.m:20:5:使用未声明的标识符“MyClass”。
请注意,我将 Swift 类声明为 @objc 和 public。我对 Apple 文档的理解是,这应该使任何变量和函数对同一目标中的 Objective-C 代码可见。项目模块名称为“swiftTest”。
任何人都可以对此有所了解吗?我几乎一整天都在努力让它工作。谢谢!
【问题讨论】:
-
那是你的真实代码吗?在
viewDidLoad中只有MyClass?那无法编译。你希望它做什么? -
您是否尝试在 Objective-C 文件的
viewDidLoad中编写 Swift 语法?我很确定你可以使用 Swift 类,但你仍然需要使用 Obj-C 语法MyClass *swiftObject = [[MyClass alloc] init];- 或者你的初始化程序已经设置好了。 -
不,这不是真正的代码。正如我在帖子中所说,一旦我进入 MyClass,编译器就不会让我添加其余的代码。但这里是原始的、未编译的代码:
-
@MartinR,不,这不是真正的代码。正如我在帖子中所说,一旦我进入 MyClass 编译器就不会让我添加其余的代码。但这里是原始的、未编译的代码,奇怪的是它现在可以工作了。我不知道有什么不同,但是当我遇到“使用未声明的标识符”错误时,这与我之前运行的相同: - (void)viewDidLoad { [super viewDidLoad]; // 在加载视图后做任何额外的设置,通常是从一个 nib。 MyClass *myclass= [[MyClass alloc]init]; myclass.property = @"你好,斯威夫特"; [我的类方法]; }
标签: objective-c swift xcode objective-c-swift-bridge