2016-07-19 59 views
1

我正在为我的项目编写测试用例(XCTestCases),它与Obj C以及Swift代码混合在一起。 我能够用迅捷的语言编写Objective C代码的测试用例。 但我无法在Objective C测试文件中访问Swift类。它显示编译器错误。通过XCode中的Objective C代码测试Swift代码

  1. 我在我的Objective C测试文件中导入了#import“MyProjectTests-Swift.h”文件。
  2. “启用可测性”和“定义模块”设置为“是”的测试目标

我错过了什么?当我打开“MyProjectTests-Swift.h”文件时,我无法看到Obj C为Swift代码生成的声明。

我的代码

#import <XCTest/XCTest.h> 
#import <OCMock/OCMock.h> 
#import "MyProjectTests-Swift.h" 


- (void)testExample {  
    MyController *myController= [[MyController alloc] init]; 
} 

错误

1. Use of undeclared identifier 'MyController' 
2. Use of undeclared identifier 'myController' 

MyProjectTests-Swift.h代码

// Generated by Apple Swift version 2.2 (swiftlang-703.0.18.8 clang-703.0.31) 
#pragma clang diagnostic push 

#if defined(__has_include) && __has_include(<swift/objc-prologue.h>) 
# include <swift/objc-prologue.h> 
#endif 

#pragma clang diagnostic ignored "-Wauto-import" 
#include <objc/NSObject.h> 
#include <stdint.h> 
#include <stddef.h> 
#include <stdbool.h> 

#if !defined(SWIFT_TYPEDEFS) 
# define SWIFT_TYPEDEFS 1 
# if defined(__has_include) && __has_include(<uchar.h>) 
# include <uchar.h> 
# elif !defined(__cplusplus) || __cplusplus < 201103L 
typedef uint_least16_t char16_t; 
typedef uint_least32_t char32_t; 
# endif 
typedef float swift_float2 __attribute__((__ext_vector_type__(2))); 
typedef float swift_float3 __attribute__((__ext_vector_type__(3))); 
typedef float swift_float4 __attribute__((__ext_vector_type__(4))); 
typedef double swift_double2 __attribute__((__ext_vector_type__(2))); 
typedef double swift_double3 __attribute__((__ext_vector_type__(3))); 
typedef double swift_double4 __attribute__((__ext_vector_type__(4))); 
typedef int swift_int2 __attribute__((__ext_vector_type__(2))); 
typedef int swift_int3 __attribute__((__ext_vector_type__(3))); 
typedef int swift_int4 __attribute__((__ext_vector_type__(4))); 
#endif 

#if !defined(SWIFT_PASTE) 
# define SWIFT_PASTE_HELPER(x, y) x##y 
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) 
#endif 
#if !defined(SWIFT_METATYPE) 
# define SWIFT_METATYPE(X) Class 
#endif 

#if defined(__has_attribute) && __has_attribute(objc_runtime_name) 
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) 
#else 
# define SWIFT_RUNTIME_NAME(X) 
#endif 
#if defined(__has_attribute) && __has_attribute(swift_name) 
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) 
#else 
# define SWIFT_COMPILE_NAME(X) 
#endif 
#if !defined(SWIFT_CLASS_EXTRA) 
# define SWIFT_CLASS_EXTRA 
#endif 
#if !defined(SWIFT_PROTOCOL_EXTRA) 
# define SWIFT_PROTOCOL_EXTRA 
#endif 
#if !defined(SWIFT_ENUM_EXTRA) 
# define SWIFT_ENUM_EXTRA 
#endif 
#if !defined(SWIFT_CLASS) 
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA 
# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 
# else 
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 
# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 
# endif 
#endif 

#if !defined(SWIFT_PROTOCOL) 
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 
#endif 

#if !defined(SWIFT_EXTENSION) 
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) 
#endif 

#if !defined(OBJC_DESIGNATED_INITIALIZER) 
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer) 
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) 
# else 
# define OBJC_DESIGNATED_INITIALIZER 
# endif 
#endif 
#if !defined(SWIFT_ENUM) 
# define SWIFT_ENUM(_type, _name) enum _name : _type _name; enum SWIFT_ENUM_EXTRA _name : _type 
# if defined(__has_feature) && __has_feature(generalized_swift_name) 
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_EXTRA _name : _type 
# else 
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) SWIFT_ENUM(_type, _name) 
# endif 
#endif 
#if defined(__has_feature) && __has_feature(modules) 
#endif 

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" 
#pragma clang diagnostic ignored "-Wduplicate-method-arg" 
#pragma clang diagnostic pop 

斯威夫特myController的类

import Foundation 

class MyController: UIViewController, UITextFieldDelegate { 

// Project specific logic 

} 
+0

什么是错误?你使用的是什么代码? –

+0

@ LucaD'Alberti,我添加了代码。正如我所提到的,我无法访问Obj C文件中的Swift类。 – Swapnil

+0

'MyProjectTests-Swift.h'里面有什么? –

回答

0

我得到了问题。测试目标中缺少桥接头(Swift编译器 - 代码生成 - > Objective-C桥接头) 我刚添加它并构建项目。现在MyProjectTests-Swift.h显示了所有客观的C生成的头声明。

希望这会有助于如果有人面临同样的问题。

+0

我想知道为什么这是一个开始的问题。您的桥接头是否有特殊名称,而不是_ProjectName_-Bridging-Header.h? –