ios - 这个函数/变量是如何工作的?

标签 ios swift

我正在使用以下代码来检索 NSURLCredentials:

let credentials: NSURLCredential? = {
    let loginProtectionSpace = NSURLProtectionSpace(host: host, port: 0, protocol: NSURLProtectionSpaceHTTP, realm: nil, authenticationMethod: NSURLAuthenticationMethodDefault)
    let credentials = NSURLCredentialStorage.sharedCredentialStorage().defaultCredentialForProtectionSpace(loginProtectionSpace)
    return credentials
}()

这会在用户打开应用时调用。返回的凭据为零。然后我设置这些凭据并尝试再次打印凭据,但它仍然是零。但是,如果我重新启动应用程序,打印的凭据就在那里。这是怎么回事?

最佳答案

这是一个惰性变量。当您首次访问该属性时,代码将执行一次。之后,最初返回的值被“记住”并在以后的调用中返回。

如果您自己在 NSURLCredentialStorage 中设置凭据,那么在下次启动应用程序时,第一次访问该属性会再次执行代码并检索存储的凭据。请注意,在您第一次设置凭据的运行期间,从存储中检索凭据的实际 3 行代码不会执行第二次,因此在该应用程序运行期间,该属性仍然是 nil而实际上存储中有一个值。如果您修改现有凭据,则会发生类似的事情 - 在您更改它们的运行期间,凭据 仍将保留对先前凭据的引用。

如果您希望能够重新查询商店,您应该要么

关于ios - 这个函数/变量是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37488581/

相关文章:

ios - 快速警报操作处理程序无法正常工作特定情况

iphone - 如何避免 iOS 上的盗版(通常在移动应用程序中)

ios - Swift 中的全局宏

ios - 如何检查UIButton的背景色

ios - 您能否以编程方式检测 MPMoviePlayerController currentPlaybackTime 中的更改

ios - 我无法让这个 CA 动画正常工作

string - 如何转置字符串数组

xcode - swift 2.0 : Type of expression is ambiguous without more context (Using Parse)

ios - 具有 queryEqual 值的 observeSingleEvent 不起作用

ios - 相机模式下的 UIImagePickerView 在 iPad 上的 dismissViewController 上显示全黑