gpt4 book ai didi

swift - 在 Swift 中创建没有外部属性的结构/协议(protocol)/类

转载 作者:行者123 更新时间:2023-11-30 11:30:59 27 4
gpt4 key购买 nike

我有一个类想要返回一个 token ,它可以单独创建和读取该 token ,但可以将其交给客户端类,该客户端类除了将其返回之外无法对其执行任何操作。 token 包含一个值。我该如何设计它,使其只有私有(private)属性/方法,但看起来对公众完全不透明。我不想进行任何转换,它需要在所属类内部保持类型安全。 swift 4.x。

最佳答案

这是我微弱的尝试。我认为没有办法使类完全不透明,即隐藏其所有成员的名称,但可以使它们不可访问。

struct Token {
//everyone can see this property exists, but only
//classes defined in this file can see its value
fileprivate let value: String
init(value: String) {
self.value = value
}
}

我假设您需要一个类来发布和验证 token 。它需要能够看到 token 的内部。

class TokenManager {
func requestToken() -> Token {
return Token(value: "a magic token value")
}
func isValid(token: Token) -> Bool {
//to inspect the token's value, this class needs to be defined
//in the same file as the Token
return token.value == "a magic token value"
}
}

token 的使用者会请求这样的 token :

    let myToken = TokenManager().requestToken()

它会知道 token 有一个 value 属性,但无法访问它:

    //print(myToken.value) //'value' is inaccessible due to 'fileprivate' protection level

但是TokenManager可以检查 token 的值:

    let isValid = TokenManager().isValid(token: myToken)
print(isValid) //true

毫无疑问,您会希望将一些数据传递到 requestToken 方法中,并在 isValid 方法中验证这些数据,但正如他们所说,这只是一个练习读者。

请注意,您不能将 Token 设为 fileprivate struct,因为这样就没有人可以获得 token 。

关于swift - 在 Swift 中创建没有外部属性的结构/协议(protocol)/类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50264366/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com