Я использую этот код в 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, но не знаю, правильно ли это сделать.
Есть идеи? Заранее спасибо.