gpt4 book ai didi

swift - 如何比较两个 UIDynamicProviderColor?

转载 作者:行者123 更新时间:2023-11-28 05:37:47 26 4
gpt4 key购买 nike

我正在比较使用新的 iOS 13 init(dynamicProvider:) 初始化的两个 UIColor

https://developer.apple.com/documentation/uikit/uicolor/3238041-init

但这就是我在单元测试中将它们与 XCTAssertEqual 进行比较时得到的运行时间:

XCTAssertEqual failed: ("Optional(<UIDynamicProviderColor: {...}; 
provider = <__NSMallocBlock__: {...}>>)") is not equal to
("Optional(<UIDynamicProviderColor: {...}; provider = <__NSMallocBlock__: {...}>>)")

这是我如何创建颜色的示例:

struct Style {
static var color: UIColor {
if #available(iOS 13.0, *) {
return UIColor { traitCollection in
return traitCollection.userInterfaceStyle == .dark ? .secondarySystemBackground : UIColor.white
}
} else {
return UIColor.white
}
}
}

测试代码:

func testExample() {
XCTAssertEqual(Style.color, Style.color)
}

我尝试用扩展重写 UIColorisEqual 方法,但显然它没有被调用。

您对此有任何解决方法吗?

最佳答案

单元测试的一种解决方案是将代码更改为:

XCTAssertEqual(Style.color.cgColor, yourExpectedColor.cgColor)

在运行时的 iOS 13 中,它正在比较两个 UIDynamicProviderColor 对象,这两个对象在运行 block “(UITraitCollection) -> UIColor”后返回一个 UIColor 对象。所以,这就是你有两个不同对象的原因。从两者中获取 cgColor 可以正确比较它们。希望对您有所帮助。

关于swift - 如何比较两个 UIDynamicProviderColor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58065340/

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