Ios Swift 3:实例成员';CognitoPoolID';不能用于类型';常数';
我无法在Xcode上解决这个问题 下面是常量的定义方式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
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这会爆炸。。只能在类型上声明静态属性