繁体   English   中英

Swift 5 类型的值没有成员

[英]Swift 5 Value of type has no member

我用一个公共函数创建了一个 swift xcframework:

public func getClientWithCompletion(clientId: String, completion: @escaping (Result<Client, Error>) -> Void) {
    let urlString = "https://api-here.com"
    guard let url = URL(string: urlString) else { return }
    
    URLSession.shared.dataTask(with: url) { (data, resp, err) in
        if let err = err {
            completion(.failure(err))
            return
        }
        
        do {
            let client = try JSONDecoder().decode(Client.self, from: data!)
            print("client: ", client)
            print("client name: ", client.name)
            completion(.success(client))
        } catch let jsonError {
            completion(.failure(jsonError))
        }
    }.resume()
}

这两个打印语句看起来是正确的。 我看到客户:

Client(name: "Blueprint")

和客户名称:

Blueprint

这是客户端结构

public struct Client {
    let name: String
}

extension Client: Codable {
    enum CodingKeys: String, CodingKey {
        case name
    }
}

但是,当我从演示项目中调用此 function 时,我无法访问成员name

astra.getClientWithCompletion(clientId: "7ce19ab3d29c4680b1f9e7e135472bec") { res in
    switch res {
    case .success(let client):
        print(client) <-- prints fine
        print("new way of showing client: ", client.name) <-- Value of type 'Client' has no member 'name'
                
    case .failure(let error):
        print("failure: ", error)
    }
}

我无法在演示应用程序上访问 Client 的名称成员,这是怎么回事?

如果您将类型的访问级别定义为 internal 或 public(或使用默认访问级别 internal 而不明确指定访问级别),则该类型成员的默认访问级别将是 internal。

https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html

我讨厌那样,并希望它像你想象的那样工作。 它的最大问题是不一致: public将级联下来,但仅限于public extension 因此,我建议使用扩展来进行访问分组。 但是,您不能使用存储的属性来做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM