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)
})
}
Обратите внимание, что я предполагаю, что вы хотите передать функциям препроцессора.