在Swift中继承iOS的错误,它继承自Obj-C类

时间:2016-03-24 14:04:48

标签: ios objective-c swift

我们在从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

干杯, 涡

1 个答案:

答案 0 :(得分:3)

问题是+[ViewController getObj]正在返回类型为

的对象
InheritanceTest.SwiftController

您的单元测试正在将其与班级进行比较

InheritanceTestTests.SwiftController

两个班级不同。

从单元测试的目标成员资格中删除SwiftController.swift,然后在@testable import InheritanceTest的顶部添加Test.swift

这会让您的单元测试可以访问SwiftController使用的ViewController.m