由于可可豆荚中的内部保护错误快速类功能而无法访问
Posted
技术标签:
【中文标题】由于可可豆荚中的内部保护错误快速类功能而无法访问【英文标题】:Inaccesible to access due to internal protection error swift class function in cocoa pod 【发布时间】:2020-07-25 16:38:22 【问题描述】:我正在构建一个可可豆荚作为 RESTAPI 的包装器,我在可可豆荚项目的 Class 文件夹中创建了一个 Swift 文件。在 swift 文件中,我添加了一个符合可编码协议的单例模式类和协议。但是,当我尝试访问示例应用程序 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 func getCapsules(onCompletion :@escaping(Capsules) -> Void)
公开你的方法
我已将其设为公开,但 Xcode 自动完成仍无法识别它并给出错误
【参考方案1】:
将您的变量和函数公开以获取访问权限...默认情况下它们是内部的
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]
【讨论】:
当我将方法公开时,我收到此错误方法不能被声明为公开,因为它的参数使用内部类型 你还需要公开 struct 是的,我也公开了 struct 我已经发布了有问题的修改代码,但它仍然无法正常工作 它在我这边工作......你从代码中删除了共享对象 不,先生它在复制代码时错误地出现在网络服务类中我没有复制它【参考方案2】:我发现在将结构的所有属性和类的函数设置为公共 Xcode 12 beta 后仍然显示错误,但在构建时它工作正常。 这是 Xcode 12 beta 中的一个错误
【讨论】:
以上是关于由于可可豆荚中的内部保护错误快速类功能而无法访问的主要内容,如果未能解决你的问题,请参考以下文章
使用可可豆荚的 Parse 1.7.1 中缺少 PFImageView