Ios Swift 3:实例成员';CognitoPoolID';不能用于类型';常数';

Ios Swift 3:实例成员';CognitoPoolID';不能用于类型';常数';,ios,swift,amazon-cognito,auth0,Ios,Swift,Amazon Cognito,Auth0,我无法在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:aw

我无法在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”不能用于类型“Constants”

下面是从提供者声明一直到最后的代码

// 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)
  }

}

这意味着什么?

错误消息
实例成员“CognitoPoolID”不能用于类型“Constants”
表示您正在将
CognitoPoolID
应用于类或结构的名称,
Constants
,但它是实例属性。如果您想将其作为类或静态属性,则需要使用
class
static
声明它

那么,在你的情况下,你说:

struct Constants {
    let AWSAccountID = // ...
    let CognitoPoolID = // ...
    let CognitoRoleAuth = // ...
}
struct Constants {
    static let AWSAccountID = // ...
    static let CognitoPoolID = // ...
    static let CognitoRoleAuth = // ...
}
你应该说:

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

只要改变一下。现在,您的代码将正确编译(并工作)。

好吧,我已经尝试将我想要的数据直接添加到方法中,而不使用常量文件。但如果你能给我一个解决方案,我将不胜感激。嗯,是的,我希望得到帮助。所以我的回答是正确的。你应该说
static let
。这样就解决了问题,但现在我得到另一个错误如下:>类型为'String'的值没有成员'Value',只需删除
.Value
部分即可。你从不需要它。我无法想象你以为这是为了什么。这些东西都是弦,这正是你想要的。没有swift 3这会爆炸。。只能在类型上声明静态属性