Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift中转换从Obj-C类继承的对象时发生iOS错误_Ios_Objective C_Swift - Fatal编程技术网

在Swift中转换从Obj-C类继承的对象时发生iOS错误

在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 { } 测试代码时,以下

在Swift类中从目标C类继承时,我们在项目中发现了一个问题

ViewController.m

@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