将从 HTTP 请求数据声明的数据/变量传递到另一个视图控制器
Posted
技术标签:
【中文标题】将从 HTTP 请求数据声明的数据/变量传递到另一个视图控制器【英文标题】:Passing data/variable declared from HTTP request data to another View Controller 【发布时间】:2021-10-06 02:28:42 【问题描述】:总结:
在我的第一个屏幕的登录视图控制器中,我将它设置为当用户点击“登录”时它将运行一个函数,该函数接收用户名和密码,并通过 HTTP 请求将它们发布到我的后端.然后从该函数中的该请求,在返回的响应中,数据中有一个“user_id”。我需要以某种方式设置返回到变量的“user_id”,以便我可以在整个应用程序中使用它。例如,每当我在应用程序中发出任何请求时,我都需要将“user_id”插入 URL 以获取用户帐户的数据。我将包含代码 sn-ps。
第一个来自我的登录功能。从上一个打印中可以看出,这就是如何解析以从响应中获取“user_id”。
let decoder = JSONDecoder()
let loginResponse = try decoder.decode(LoginResponse.self, from: json)
print(loginResponse.data)
print(loginResponse.data.id)
下一个来自我需要获取“user_id”并将其插入到另一个文件中另一个 HTTP 请求的 URL 的实例。
let resourceString = "https://*******.herokuapp.com/\(userID)/allergies"
guard let resourceURL = URL(string: resourceString) else fatalError()
任何帮助将不胜感激,如果我需要提供更多信息,请告诉我。
【问题讨论】:
听起来是个有趣的话题。如果你展示一个名为“LoginResponse”的人是什么以及你是如何运行你所谓的那个函数的东西,那就更好了。 您应该使用Coredata,用户默认或钥匙串来保存userId,因此当您提出新请求时,您必须添加userId。 【参考方案1】:是的,您可以在 Userdefaults 中保存访问令牌或用户 ID,并检查用户是否登录或在下一个请求中使用它
UserDefaults.standard.set(loginResponse.data.id, forKey: "userId")
使用它
let userId = UserDefaults.standard.value(forKey: "userId")
【讨论】:
这成功了!谢谢 请点赞!!【参考方案2】:通常您有更多的验证和安全性可以到达后端。比如,身份验证/不记名令牌/刷新令牌。我倾向于将这些保存在我的 requestBuilder 协议中使用的 Authenticator 单例中。
如果你想保存用户 ID,即使他们关闭了应用程序一段时间,那么我同意 @luffy_064 应该将它保存在 UserDefault 或 CoreData 中。
因为它只有 1 个键,所以我更喜欢 UserDefault,因为它既快速又简单。钥匙串更像是一生的东西。我不建议使用用户 ID,但如果他们想保存密码。
【讨论】:
以上是关于将从 HTTP 请求数据声明的数据/变量传递到另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
MSoft Access - 将变量从一种形式传递到另一种形式
如何将从 json 检索到的数据从一个视图传递到另一个视图? [复制]
如何将从 Ajax 请求收到的响应重定向到另一个 html 页面