在Swift中转换从Obj-C类继承的对象时发生iOS错误
在Swift类中从目标C类继承时,我们在项目中发现了一个问题 ViewController.m在Swift中转换从Obj-C类继承的对象时发生iOS错误,ios,objective-c,swift,Ios,Objective C,Swift,在Swift类中从目标C类继承时,我们在项目中发现了一个问题 ViewController.m @implementation ViewController + (ViewController*) getObj { ViewController *obj = [[SwiftController alloc] init]; return obj; } swift控制器 class SwiftController: ViewController { } 测试代码时,以下
@implementation ViewController
+ (ViewController*) getObj {
ViewController *obj = [[SwiftController alloc] init];
return obj;
}
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上找到此示例项目的副本:
干杯,
Eddy问题在于
+[ViewController getObj]
返回的对象类型为:
InheritanceTest.SwiftController
您的单元测试正在将其与类进行比较
InheritanceTestTests.SwiftController
这两个班是不同的
从单元测试的目标成员身份中删除SwiftController.swift
,然后在Test.swift
顶部添加@testable import-InheritanceTest
这将使您的单元测试能够访问ViewController.m
使用的相同SwiftController