首页 > 解决方案 > iOS:如何在目标 C 中使用我的 swift 类中的特定功能?`使用未声明的标识符'NetworkClient'`

问题描述

我在 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'

有任何想法吗?提前致谢。

标签: iosobjective-cswiftalamofireobjective-c-swift-bridge

解决方案


你需要继承你的 Swift 类,NSObject它才能对 Objective-C 可见。

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

推荐阅读