2016-10-14 4 views
-1

Ich konnte dieses Problem auf Xcode nicht lösen.Swift 3: Instanz-Member 'CognitoPoolID' kann nicht für den Typ 'Konstanten' verwendet werden

Hier ist, wie der Konstanten

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" 

} 

Das Hauptproblem ist auf dieser Linie definiert ist

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

Der Fehler, die ich erhalte, wenn ich versuche zu bauen und/oder eine Code-Analyse ausführen gibt mir der folgende Compilerfehler.

Instanz Mitglied ‚CognitoPoolID‘ kann nicht auf ‚Constants‘ Typ

hier verwendet wird, ist der Code von dem Anbieter Erklärung der ganzen Weg bis zum Ende.

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

} 

Was bedeutet das?

+0

Nun, ich habe versucht, die Daten, die ich will direkt in die Methode ohne die Konstanten-Datei hinzufügen. Aber ich würde mich freuen, wenn Sie mir eine Lösung geben könnten. –

+0

Nun ja ich hätte gerne Hilfe dann bitte. –

+0

Also meine Antwort war richtig. Du hättest "Static Let" sagen sollen. – matt

Antwort

1

Die Fehlermeldung Instance member 'CognitoPoolID' cannot be used on type 'Constants' bedeutet, dass Sie CognitoPoolID auf den Namen eines Klasse oder struct, Constants, aber es ist eine Instanz Eigenschaft anwenden. Wenn Sie dies als eine Klasse oder statische Eigenschaft meinten, mussten Sie es mit class oder static deklarieren.

also in Ihrem Fall haben Sie gesagt:

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

sollten Sie gesagt haben:

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

Genau diesen Wandel herbeizuführen. Jetzt wird Ihr Code korrekt kompiliert (und funktioniert).

+0

Nun, diese Art von löschte das Problem, aber jetzt bekomme ich einen weiteren Fehler wie folgt: –

+1

> Wert des Typs 'String' hat keinen Member 'Wert' –

+0

Löschen Sie einfach den '.value' Teil. Du hast es nie gebraucht. Ich kann mir nicht vorstellen, wofür du gedacht hast. Diese Dinge sind Strings, die genau das sind, was Sie wollen. – matt

Verwandte Themen