Расширения Swift не работают в тестах, когда SDK находится в Objective-C - PullRequest
1 голос
/ 21 октября 2019

У меня есть SDK A в Objective-C, который работает нормально. Я создал для него расширения, и он все еще работает с рабочим кодом.

Когда я начал тестировать свой код и напрямую использую SDK, все в порядке. Мои тесты не выполняются, когда я вызываю расширение с помощью stacktrace: file:///%3Cunknown%3E: test failure: SomeTests.testAExtension() failed: failed: caught "NSInvalidArgumentException", “-[A myFun()]: unrecognized selector sent to instance 0x600001a8d3e0…

Это код, который я использую:

// sdk class in Objective-C
class A {
    func sdkFun() {
        // do something
    }
}

extension A {
    func myFun() {
        sdkFun()
    }
}

class SomeTests {

    // O.K.
    func testAFun() {
        let a = A()
        a.sdkFun()
    }

    // Fails with error
    func testA() {
        let a = A()
        a.myFun()
    }
}

Что я не так делаю? Я пользуюсь Swift 4.2

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

@ objc с публичной функцией и расширением и вашим классом. вот так

@objc public class A {
  @objc public func sdkFun() {
    // do something
  }
}
@objc public extension A {
  @objc public func myFun() {
    sdkFun()
  }
}
0 голосов
/ 21 октября 2019

Используйте @ objc перед вашим extension в swift файле. как ниже

@objc extension A {
    func myFun() {
        sdkFun()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...