[英]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.