2017-03-08 2 views
4

Lorsque j'essaie de me connecter, je suis confronté à cette erreur.'String' n'est pas conforme au type attendu 'CVarArg'

remote: /tmp/build_f459d376d1bc10ac2e93e52575ac5ea9/Sources/App/main.swift:368:49: error: argument type 'String' does not conform to expected type 'CVarArg' 
remote:      NSLog("FILE NOT AVAILABLE", "TESTNOTI") 
remote:             ^~~~~~~~~~ 
remote:               as! CVarArg 

mycode

 if fileManager.fileExists(atPath: (drop.config["servers", "default", "KeyURL"]?.string ?? "default")) { 
      NSLog("FILE AVAILABLE", "TESTNOTI") 
     } else { 
      NSLog("FILE NOT AVAILABLE", "TESTNOTI") 
     } 
+0

partagent certaines ligne de code. –

+1

Où est-ce que "as!" CVarArg' dans le message d'erreur vient? Ce n'est pas dans le code. En dehors de cela, il est absurde d'utiliser deux arguments dans NSLog sans aucun espace réservé ('% @') – vadian

Répondre

8

NSLog prend comme premier argument une chaîne de format , qui est suivi par une liste d'arguments, qui sont substitués pour les marqueurs dans la chaîne de format (comparer String Format Specifiers).

Sur les plateformes Apple, vous pouvez imprimer un String en utilisant le format %@:

let fileName = "the file" 
NSLog("File not found: %@", fileName) 

Cependant, cela ne fonctionne pas sur les plates-formes Linux (comme la vapeur). Ici, vous devez convertir la chaîne Swift à une chaîne C pour passer comme argument pour NSLog (et utiliser le format %s pour les chaînes C):

let fileName = "the file" 
fileName.withCString { 
    NSLog("File not found: %s", $0) 
} 
1

Il semble que vous utilisez le Cadre Vapor, et je cite:

Toutes les bibliothèques principales (Foundation) ne sont pas encore disponibles sur Linux.

La question que vous avez créé plus à vapeur a obtenu une réponse déjà: https://github.com/vapor/vapor/issues/870