我们在从Swift类中的Objective C类继承
时发现了我们项目中的一个问题ViewController.m
@implementation ViewController
+ (ViewController*) getObj {
ViewController *obj = [[SwiftController alloc] init];
return obj;
}
SwiftController.swift
class SwiftController: ViewController { }
测试代码时,以下测试失败
class Test: XCTestCase {
func testFails() {
let obj = ViewController.getObj()
XCTAssertTrue(obj is SwiftController)
}
}
在swift中实现相同的行为只能正常工作。
class FirstController { }
class SecondController: FirstController {
static func getObj() -> FirstController {
let obj: FirstController = SecondController()
return obj
}
}
func testOk() {
let obj = SecondController.getObj()
XCTAssertTrue(obj is SecondController)
}
这是一个swift / obj-c错误还是有人有这种行为的解决方案?
此示例项目的副本可以在github上找到:https://github.com/edgeftq/inheritanceTest.git
干杯, 涡
答案 0 :(得分:3)
问题是+[ViewController getObj]
正在返回类型为
InheritanceTest.SwiftController
您的单元测试正在将其与班级进行比较
InheritanceTestTests.SwiftController
两个班级不同。
从单元测试的目标成员资格中删除SwiftController.swift
,然后在@testable import InheritanceTest
的顶部添加Test.swift
。
这会让您的单元测试可以访问SwiftController
使用的ViewController.m
。