[英]Create struct/protocol/class with no external properties in Swift
我有一个想要返回一个令牌的类,该令牌可以单独创建和读取,但是可以交给一个客户端类,该客户端类只能将其归还给它。 令牌包含一个值。 我该如何设计它,使其仅具有私有属性/方法,但对公众完全不透明。 我不想进行任何强制转换,它需要在所属类内部为类型安全。 Swift4.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
}
}
我假设您需要一个用于发布和验证令牌的类。 它需要能够看到令牌内部。
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"
}
}
令牌的使用者将请求这样的令牌:
let myToken = TokenManager().requestToken()
它会知道令牌具有value
属性,但是将无法访问它:
//print(myToken.value) //'value' is inaccessible due to 'fileprivate' protection level
但是TokenManager
可以检查令牌的值:
let isValid = TokenManager().isValid(token: myToken)
print(isValid) //true
毫无疑问,您希望将一些数据传递到您将在isValid
方法中验证的requestToken
方法中,但是正如他们所说,这是留给读者的一项练习。
请注意,您不能将Token
为fileprivate struct
因为这样没人会获得令牌。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.