我正在构建一个 cocoa pod 作为 RESTAPI 的包装器,我在 cocoa pod 项目的 Class 文件夹中创建了一个 Swift 文件。在 swift 文件中,我添加了一个符合可编码协议(protocol)的单例模式类和协议(protocol)。但是,当我尝试访问示例应用程序 viewcontroller.swift 文件中的单例类函数时,我收到一条错误消息,指出由于内部保护而无法访问 getCapsules。即使已将所有内容设为公开,我仍然收到此错误。
类文件夹文件
import Foundation
class NetworkService
{
public let capsuleurl = URL(string: "https://api.spacexdata.com/v4/capsules")
public let session = URLSession(configuration: .default)
public func getCapsules(onCompletion :@escaping(Capsules) -> Void)
{
let task = session.dataTask(with: capsuleurl!) { (data, response, error) in
DispatchQueue.main.async {
do
{
let capsules = try JSONDecoder().decode(Capsules.self, from: data!)
onCompletion(capsules)
}
catch
{
print(error.localizedDescription)
}
}
}
task.resume()
}
}
public struct Capsule: Codable {
public let reuseCount, waterLandings, landLandings: Int
public let lastUpdate: String?
public let launches: [String]
public let serial: String
public let status: Status
public let id: String
public enum CodingKeys: String, CodingKey {
case reuseCount = "reuse_count"
case waterLandings = "water_landings"
case landLandings = "land_landings"
case lastUpdate = "last_update"
case launches, serial, status, id
}
}
public enum Status: String, Codable {
case active = "active"
case destroyed = "destroyed"
case retired = "retired"
case unknown = "unknown"
}
public typealias Capsules = [Capsule]
在示例应用程序中查看 controller.swift 文件import UIKit
import KSBSpacexKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NetworkService.sharedobj. //I get error here sometimes NetworkService also not show in autocomplete
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
最佳答案
将您的变量和函数公开以获取访问权限...默认情况下它们是内部的
public class NetworkService
{
public static var sharedobj = NetworkService()
public let capsuleurl = URL(string: "https://api.spacexdata.com/v4/capsules")
public let session = URLSession(configuration: .default)
public func getCapsules(onCompletion :@escaping(Capsules) -> Void)
{
let task = session.dataTask(with: capsuleurl!) { (data, response, error) in
DispatchQueue.main.async {
do
{
let capsules = try JSONDecoder().decode(Capsules.self, from: data!)
onCompletion(capsules)
}
catch
{
print(error.localizedDescription)
}
}
}
task.resume()
}
}
struct Capsule: Codable {
let reuseCount, waterLandings, landLandings: Int
let lastUpdate: String?
let launches: [String]
let serial: String
let status: Status
let id: String
enum CodingKeys: String, CodingKey {
case reuseCount = "reuse_count"
case waterLandings = "water_landings"
case landLandings = "land_landings"
case lastUpdate = "last_update"
case launches, serial, status, id
}
}
enum Status: String, Codable {
case active = "active"
case destroyed = "destroyed"
case retired = "retired"
case unknown = "unknown"
}
typealias Capsules = [Capsule]
关于ios - 由于 cocoa pod 中的内部保护错误快速类功能而无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63090855/