iOS: Как использовать заданную c функцию из моего класса swift в объективе C? `Использование необъявленного идентификатора 'NetworkClient`` - PullRequest
0 голосов
/ 27 марта 2020

Я использую этот код в Swift, который хорошо работает, но невозможно назвать его в Objective C.

import Foundation
import Alamofire


enum Router: URLRequestConvertible {
  case users

  static let baseURLString = "https://api.stackexchange.com/2.2"

  func asURLRequest() throws -> URLRequest {
    let path: String
    switch self {
    case .users:
      path = "/users?order=desc&sort=reputation&site=stackoverflow&max=10"
    }

    let url = URL(string: Router.baseURLString + path)!
    return URLRequest(url: url)
  }
}

@objcMembers public final class NetworkClient {
  // 1
  let evaluators = [
    "api.stackexchange.com":
      PinnedCertificatesTrustEvaluator(certificates: [
        Certificates.stackExchange
        ])
  ]

  let session: Session

  // 2
  private init() {
    session = Session(
      serverTrustManager: ServerTrustManager(evaluators: evaluators)
    )
  } ...

Я использую его так же, как в Swift:

 NetworkClient.request(Router.users)
      .responseDecodable { (response: DataResponse<UserList>) in
        switch response.result {
        case .success(let value):
          self.users = value.users
        case .failure(let error):
          let isServerTrustEvaluationError =
            error.asAFError?.isServerTrustEvaluationError ?? false
          let message: String
          if isServerTrustEvaluationError {
            message = "Certificate Pinning Error"
          } else {
            message = error.localizedDescription
          }
          self.presentError(withTitle: "Oops!", message: message)
        }
      }

Я пробовал это в Objective C безуспешно:

NetworkClient.request.responseDecodable()
    {

    }

Сообщение об ошибке: Use of undeclared identifier 'NetworkClient'

  • Я добавил # import myapp-Swift.h правильно
  • Я добавил @objcMembers, но не знаю, правильно ли это сделать.

Есть идеи? Заранее спасибо.

1 Ответ

1 голос
/ 27 марта 2020

Вам нужен ваш класс Swift для наследования от NSObject, чтобы он был виден Objective- C.

public final class NetworkClient: NSObject {
   // ...
}
...