ios - 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'
- 我正确 添加了#import myapp-Swift.h
- 我添加了@objcMembers,但我不知道这是否是正确的方法。
有任何想法吗?提前致谢。
解决方案
你需要继承你的 Swift 类,NSObject
它才能对 Objective-C 可见。
public final class NetworkClient: NSObject {
// ...
}
推荐阅读
- node.js - 将图像文件上传到 s3 存储桶效果不佳。怎么修?
- javascript - CRA window.location.reload(true) 不更新 PWA
- django - 访问 ImageField url 时如何避免提供服务器地址
- java - 我可以使用 React Native 的异步存储从本地存储中获取值吗?
- docker - 无法启动 Hyper-V 容器
- angular - 更新 EntityAdapter 中的数组
- android - 如何将图像绑定到 ImageButton 尺寸?
- c# - 从方法返回模型(DTO)的最佳实践是什么?
- angular - 为什么在 Angular 5 应用程序的屏幕上显示 null?
- c# - 如何确保其他应用程序使用我的 dll