由于可可豆荚中的内部保护错误快速类功能而无法访问

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 中的一个错误

【讨论】:

以上是关于由于可可豆荚中的内部保护错误快速类功能而无法访问的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 12 无法构建可可豆荚 - 生成伞头 [关闭]

使用可可豆荚的 Parse 1.7.1 中缺少 PFImageView

无法使用可可豆荚归档 xcode 中的构建

使用 Facebook 和 Google 登录的 AWSMobileHubHelper 无法构建 var 可可豆荚

无法在捆绑包中加载 NIB。可可豆项目

无法将没有可可豆荚的 Google Analytics iOS SDK 添加到我的项目中