iOS/Mac OS свободно работает структура соответствия, которая работает с Swift?

Есть свободный API сопоставления, который работает для кода Swift? Ведущими кандидатами на сопоставление Objective-C, по-видимому, являются OCHamcrest и Expecta, которые основаны на сложных макросах, которые ( согласно документам) недоступны для кода 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)); })

(Expecta)

Есть ли другая альтернатива, которая работает со Swift, или какой-то способ обернуть одну или другую из них, чтобы их можно было использовать со Swift?


ETA: Для будущих читателей - я посмотрел на SwiftHamcrest (согласно ответу Джона Рейда), но пока остановился на Quick / Nimble.

2 ответа

Решение

https://github.com/nschum/SwiftHamcrest - это родная реализация Swift Hamcrest

Сложные макросы препроцессора не переводятся в их альтернативы Swift. У Apple есть блог, в котором обсуждается Swift, в котором они рассказывают о том, как они сделали функцию assert.

Первый макрос легко превратить в функцию 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)
    })
}

Обратите внимание, что я предполагаю, что вы хотите передать функциям препроцессора.

Другие вопросы по тегам