【问题标题】:Generic parameter 'T' could not be inferred - Swift 5.5无法推断通用参数“T” - Swift 5.5
【发布时间】:2021-11-13 17:29:42
【问题描述】:

我正在尝试让用户登录,但出现以下错误:

Generic parameter 'T' could not be inferred

这是代码:

// Gets User signed-in
func getUser() async throws -> AuthUser {
    do {
        try await withUnsafeThrowingContinuation { continuation in
            if let user = Amplify.Auth.getCurrentUser() {
                continuation.resume(returning: user )
            }
        }
    } catch(let error) {
        print(error)
    }
}

为什么会这样?

【问题讨论】:

  • 哪一行出现错误?
  • @OscarApeland 在第 4 行,:try await withUnsafeThrowingContinuation { continuation in
  • 我以前在我的代码中遇到过这种类型的错误,尽管您的代码需要如 cmets 中提到的那样进行一些调整,但当您调用 getUser() 时,可能会出现错误。你可以试试这个:let user: AuthUser = await getUser() 你指定返回类型let user: AuthUser 这将有助于推断正确的类型,它通常对我有用。

标签: swift swiftui amplify


【解决方案1】:

其实我的电话一开始就不好,应该这样做:

// Gets User signed-in
func getUser() async throws -> AuthUser {
    return try await withCheckedThrowingContinuation { (continuation: CheckedContinuation<AuthUser, Error>) in
        if let user = Amplify.Auth.getCurrentUser() {
            continuation.resume(returning: user)
        } else {
            signOut()
        }
    }
}

欲了解更多信息,请转到here

【讨论】:

  • continuation in上指定返回类型,如(continuation: CheckedContinuation&lt;YourUserModel, YourErrorType&gt;) in...
  • idk 为什么它没有从推断中捕捉到这一点,可能是 if 没有 else 的原因
  • 我在else中添加了一个选项,所以如果用户为nil,它会注销并进入初始页面,是不是一样? @OscarApeland
  • nil 没有类型,但又是 idk。也许它是一个错误。无论哪种方式指定您的返回类型都应该解决问题
  • @Alexander lol 很高兴我问了这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2015-09-22
  • 2018-03-31
  • 1970-01-01
相关资源
最近更新 更多