繁体   English   中英

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

[英]iOS error casting Object in Swift which inherited from an Obj-C Class

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

干杯,艾迪

问题是+[ViewController getObj]返回一个类型为的对象:

InheritanceTest.SwiftController

您的单元测试将其与课程进行比较

InheritanceTestTests.SwiftController

这两个班级不同。

删除SwiftController.swift从单元测试目标会员,再加入@testable import InheritanceTest在顶部Test.swift

这将使您的单元测试访问ViewController.m使用的相同SwiftController

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM