与 Swift 一起使用的 iOS/Mac OS 流畅匹配框架?

Posted

技术标签:

【中文标题】与 Swift 一起使用的 iOS/Mac OS 流畅匹配框架?【英文标题】:iOS/Mac OS fluent matching framework that works with Swift? 【发布时间】:2014-06-29 22:52:10 【问题描述】:

是否有适用于 Swift 代码的流畅匹配 API?领先的 Objective-C 匹配器候选者似乎是 OCHamcrest 和 Expecta,它们都依赖于 (as per the docs) 对 Swift 代码不可用的复杂宏,例如

#define HC_assertThat(actual, matcher)  \
    HC_assertThatWithLocation(self, actual, matcher, __FILE__, __LINE__)

(OCHamcrest)

#define EXP_expect(actual) _EXP_expect(self, __LINE__, __FILE__, ^id return EXPObjectify((actual)); )

(预期)

是否有另一种适用于 Swift 的替代方案,或者以某种方式包装其中一个或另一个以便它们可以与 Swift 一起使用?


预计到达时间:对于未来的读者——我查看了SwiftHamcrest(根据Jon Reid's answer),但目前我已选择Quick/Nimble。

【问题讨论】:

【参考方案1】:

复杂的预处理器宏不会被翻译成它们的 Swift 替代品。 Apple 有一个讨论 Swift 的博客,in which they described on how they made the assert function。

第一个宏很容易变成 Swift 函数

#define HC_assertThat(actual, matcher)  \
    HC_assertThatWithLocation(self, actual, matcher, __FILE__, __LINE__)

在斯威夫特中:

func HC_assertThat(caller: AnyObject, actual: String, matcher: String, file: String = __FILE__, line: UWord = __LINE__) 
    HC_assertThatWithLocation(caller, actual, matcher, file.fileSystemRepresentation, Int32(line))


#define EXP_expect(actual) _EXP_expect(self, __LINE__, __FILE__, ^id return EXPObjectify((actual)); )

在斯威夫特中:

func EXP_expect(caller: AnyObject, actual: String, line: UWord = __LINE__, file: String = __FILE__) 
    _EXP_expect(caller, Int32(line), file.fileSystemRepresentation, (
        return EXPObjectify(caller)
    )

请注意,我在猜测您想要传递给预处理器函数的内容。

【讨论】:

对于 Expecta 出于某种原因在 swift 中可以调用 _EXP_expect 但 EXPObjectify 和 _EXPObjectify 不可见。我可以看到它们在objective-c 标头中声明,并且我已将其导入到桥接头中,但没有运气。知道如何让它工作吗?【参考方案2】:

https://github.com/nschum/SwiftHamcrest 是 Hamcrest 的 Swift 原生实现

【讨论】:

以上是关于与 Swift 一起使用的 iOS/Mac OS 流畅匹配框架?的主要内容,如果未能解决你的问题,请参考以下文章

Airplay 不能与 Swift 的 AVRoutePicker 一起使用,但可以与 Objective C 一起使用

将 fetchedResultsController 与 swift3 一起使用

AVKit 与 Swift 一起使用,但没有创建文件。为啥?

上下文类型 'Any' 不能与数组文字 Swift 3 一起使用

将 trailingSwipeActionsConfigurationForRowAt 与 panGestureRecognizer 与 Swift 一起使用

我可以将 NSLog 与 Swift 结构一起使用吗?