从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)
}
}
快速实现相同的行为只能正常工作。
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
干杯,涡流
问题在于+[ViewController getObj]
返回的对象类型为:
InheritanceTest.SwiftController
您的单元测试正在将其与班级进行比较
InheritanceTestTests.SwiftController
这两个类是不同的。
SwiftController.swift
从单元测试的目标成员资格中删除,然后@testable import InheritanceTest
在的顶部添加Test.swift
。
这将使您的单元测试可以访问所使用的相同SwiftController
的访问权限ViewController.m
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句