gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:51 25 4
gpt4 key购买 nike

我们在从 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,然后在 Test.swift 的顶部添加 @testable import InheritanceTest .

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

关于从 Obj-C 类继承的 Swift 中的 iOS 错误转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36202104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com