xcode Swift无法在本地包的范围内找到“”

mqkwyuun  于 2022-12-24  发布在  Swift
关注(0)|答案(1)|浏览(125)

我是swift软件包的新手,我试图创建一个简单的函数来授权用户,但是Xcode似乎找不到我的"ApiCalls"结构,尽管我已经将所有内容设置为公共,并且我遵循了如何制作软件包的教程。我一直收到这个错误

这是我的包裹

我哪里做错了?
我试着查找这个,主要问题是我的结构体和变量没有设置为public,但是即使修改Xcode也找不到它。
更新:我将其设置为静态,但仍然收到相同的错误消息:

public struct ApiCalls {
public init(currentAPIDomain: String = "my.url") {
    ApiCalls.currentAPIDomain = currentAPIDomain
}

public static var currentAPIDomain : String = "https://castle-learning-1541513232785.appspot.com/"

public static func RestApiRequest<T:Decodable>(method:ApiCallsRequestMethods, endpoint: String, model: T.Type, requirements: ApiCallsRequestRequirements) async throws -> T {
    
    guard var endpointURL = URL(string: currentAPIDomain + endpoint) else { throw ApiCallErrors.DomainMalformed }
    
    if requirements.subtitles != nil && requirements.subtitles == true {
        endpointURL = URL(string: endpoint)!
    }
    var request = URLRequest(url: endpointURL)
    
    switch method {
    case .GET:
        request.httpMethod = "GET"
    case .POST:
        request.httpMethod = "POST"
    case .PUT:
        request.httpMethod = "PUT"
    case .DELETE:
        request.httpMethod = "DELETE"
    }
    
    if requirements.subtitles != nil && requirements.subtitles == true {
        request.addValue("fdD7F8Orql9WBolf9BgjrYIDFcFhH9Hz", forHTTPHeaderField: "Api-Key")
    }
    
    if Array(requirements.token.keys)[0] == true {
        request.addValue("Bearer \(requirements.token[true]!)", forHTTPHeaderField: "Authorization")
    }
    
    if Array(requirements.body.keys)[0] == true {
        let body: [String:Any] = requirements.body[true]!
        let finalBody = try! JSONSerialization.data(withJSONObject: body)
        request.httpBody = finalBody
    }
    
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    
    guard let (data, response) = try? await URLSession.shared.data(for: request) else {
        throw ApiCallErrors.InvalidData
    }
    guard (response as? HTTPURLResponse)?.statusCode == 200 else { throw ApiCallErrors.Unexpected }
    
    guard let decodedData = try? JSONDecoder().decode(T.self, from: data) else {
        throw ApiCallErrors.ErrorDecoding
    }
    
    return decodedData
}

public static func login(username: String, password: String) async throws -> String {
    do {
        let results = try await RestApiRequest(method: .GET, endpoint: "ptv/login", model: Login_SignUp_Model.self, requirements: ApiCallsRequestRequirements(token: [false : ""], body: [true : ["email" : username, "password":password]]))
        return results.message
    } catch {
        throw error
    }
}

}

zed5wv10

zed5wv101#

这个问题与你的方法是静态的无关,但访问控制很重要。你的Swift包被认为是一个独立的模块,因此任何低于public的内容都无法从其他地方(例如你的应用)访问。
你原来的APICalls代码很好,从截图上很难判断,但是这里有三件事可以尝试:
1.您似乎在同一工作区中有两个项目。您的包在pixelstv项目中被引用,因此您将无法从Pods项目访问它。
1.您的Package.swift文件中可能存在错误。它应遵循以下基本结构:

// swift-tools-version: 5.7

//
//  APIName: Configuration
//  Developed by _
//

//  MARK: - Imports

import PackageDescription

//
//

//  MARK: - Variables

let package = Package (
    
    name: "APIName",
    
    products: [
        
        .library (
            
            name: "APIName",
            targets: [ "TargetName" ]
            
        ),
        
    ],
    
    dependencies: [ ],
    
    targets: [
        
        .target (
            
            name: "APIName",
            dependencies: [ ],
            path: "sources"
            
        ),
        
        .testTarget (
            
            name: "APINameTests",
            dependencies: [ "APIName" ],
            path: "tests"
            
        ),
        
    ]
    
)

//
//

1.这可能是Xcode的一个怪癖-没有识别更新的访问控制,完全失去了类型检查的能力,等等。尝试清理构建文件夹,重建,重新启动,重置包缓存,甚至删除+重新添加包到项目中。
使用软件包依赖性,Xcode看起来相当可靠(来自GitHub),但是使用本地包会引入很多bug。我注意到一些使用本地包才几天的地方就有25%的构建会神秘地取消,Xcode崩溃可能是因为在尝试使用预览时出现了包加载循环。你也可以一次只在一个打开的项目或窗口中引用本地包。否则您将无法编辑或访问该包。
如果你真的遇到了问题,考虑在项目内部开发API可能是个好主意,一旦完成就把它们移到一个包里,然后推送到GitHub。
回应@JoakimDanielson评论:大多数情况下我都同意,但Xcode的截图可能已经揭示了这里的问题。

相关问题