简体   繁体   English

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

[英]iOS: How to user a specific function from my swift class in objective C? `Use of undeclared identifier 'NetworkClient'`

I use this code in Swift that works well, but impossible to call it in Objective C.我在 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)
    )
  } ...

I use it like this under Swift :我在 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)
        }
      }

I tried this under Objective C with no success:我在 Objective C 下尝试过,但没有成功:

NetworkClient.request.responseDecodable()
    {

    }

The error message is: Use of undeclared identifier 'NetworkClient'错误消息是: Use of undeclared identifier 'NetworkClient'

  • I added the #import myapp-Swift.h correctly我正确添加了#import myapp-Swift.h
  • I added @objcMembers but I don't know if it is the right way to do it.我添加了@objcMembers,但我不知道这是否是正确的方法。

Any ideas?有任何想法吗? Thanks in advance.提前致谢。

You need your Swift class to inherit from NSObject for it to be visible to Objective-C.你需要你的 Swift 类从NSObject继承,以便它对 Objective-C 可见。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM