【问题标题】:Swift 3: Instance member 'CognitoPoolID' cannot be used on type 'Constants'Swift 3:实例成员 'CognitoPoolID' 不能用于类型 'Constants'
【发布时间】:2017-02-24 01:34:08
【问题描述】:

我无法在 Xcode 上解决这个问题。

这是常量的定义方式

struct Constants {

let AWSAccountID = "XXXXXXXXXXXX"
let CognitoPoolID = "arn:aws:XXXXXXX-XXXXXXXX:XX-XXXXXXXXX-X:XXXXXXXXXXXX:XXXXXXXXXXXX/XX-XXXXXXXX-X:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
let CognitoRoleAuth = "arn:aws:iam::XXXXXXXXXXXX:XXXX/XXXXXXX_XXXXXXXX_XXXX" 

}

主要问题在这一行

let provider = AWSCognitoCredentialsProvider(...
        identityPoolId:Constants.CognitoPoolID.value,...)

当我尝试构建和/或运行代码分析时收到的错误导致我出现以下编译器错误。

实例成员“CognitoPoolID”不能用于类型“常量”

这是从提供者声明一直到最后的代码。

// This specifies AWS connection parameters.
    let provider = AWSCognitoCredentialsProvider (regionType: .apNortheast1,
                                                 identityPoolId: Constants.CognitoPoolID.value,
                                                 unauthRoleArn: "arn:aws:iam::XXXXXXXXXXXX:XXXX/XXXXXXX_XXXXXXXXXXX_XXXX",
                                                 authRoleArn: Constants.CognitoRoleAuth.value,
                                                 identityProviderManager: Constants.AWSAccountID.value);

    let configuration = AWSServiceConfiguration(region:.apNortheast1, credentialsProvider:provider);

    AWSServiceManager.default().defaultServiceConfiguration(configuration)

    // Set out the Auth0 URL here which is the same Open ID Connect Provider URL.
    provider.logins = ["marcadian.au.auth0.com" : idToken]

    provider.getIdentityId().continue({ (task:AWSTask!) -> Any? in

        self.provider.refresh()

        if (task.error != nil) {
            // Failed Error Handling code goes here.

        } else {
            // User has logged in successfully.

        }
        return nil
    })

    // User has dismissed the Lock View Controller.
    controller?.dismiss(animated: true, completion: nil)
  }

}

这是什么意思?

【问题讨论】:

  • 好吧,我已经尝试将我想要的数据直接添加到没有常量文件的方法中。但如果您能给我一个解决方案,我将不胜感激。
  • 好吧,我需要帮助。
  • 所以我的回答是对的。你应该说static let

标签: ios swift amazon-cognito auth0


【解决方案1】:

错误消息Instance member 'CognitoPoolID' cannot be used on type 'Constants' 表示您将CognitoPoolID 应用于classstruct 的名称,Constants,但它是一个实例属性。如果您希望这是一个类或静态属性,则需要使用 classstatic 声明它。

所以,就你而言,你说过:

struct Constants {
    let AWSAccountID = // ...
    let CognitoPoolID = // ...
    let CognitoRoleAuth = // ...
}

你应该说:

struct Constants {
    static let AWSAccountID = // ...
    static let CognitoPoolID = // ...
    static let CognitoRoleAuth = // ...
}

只需进行更改即可。现在您的代码将正确编译(和工作)。

【讨论】:

  • 那么这样就解决了问题,但现在我收到另一个错误,如下所示:
  • >“字符串”类型的值没有成员“值”
  • 只需删除.value 部分。你从来不需要它。我无法想象你以为它是为了什么。这些东西是字符串,这正是你想要的。
  • no swift 3 这会爆炸.. 静态属性只能在类型上声明
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多